关于尚观
最新课程体系
企业服务
零起点咨询
开放课程
报名咨询
免费资源申请
授权加盟
学员专区&薪资
认证课程
  • 尚观首页
  • 尚观简介
  • 师资力量
  • 尚观文化
  • 尚观动态
  • 加入尚观
  • 联系我们
  • 珍贵瞬间
  • Linux系统与集群
  • 数据库集群架构师
  • 嵌入式内核驱动开发
  • 服务器开发架构师
  • 研发型测试架构师
  • RHCE/LPI认证体系
  • Oracle OCP认证
  • 企业高级技术培训
  • 批量人才供应及研发团队建设
  • 软件外包及研发项目合作
  • 人力外包及人力供应
  • 猎头服务
  • 开启职业生涯
  • 如何入门
  • Unix/Linux职业方向
  • 嵌入式职业方向
  • 集群(Cluster)Oracle(DBA)方向
  • 新手专栏
  • Unix/Linux新手专栏
  • Unix/Linux管理
  • 嵌入式及POSIX开发
  • Linux开源文化及市场
  • 最近网络课堂
  • P2P教学视频
  • 精彩Linux培训视频
  • 零起点数据库集群(长期)
  • 嵌入式驱动(长期)
  • Linux金牌三证(RHCE级)
  • Linux架构师(RHCA级)
  • 嵌入式/驱动加速课程
  • 其他咨询
  • Linux免费网络安全公开课
  • 免费Linux资料申请
  • 免费Linux安全&DDOS防御课程
  • 免费嵌入式Linux开发课程
  • 免费Linux网络安全机制
  • 授权加盟&报名点申请
  • 如何加盟
  • 我们的优势
  • 成功案例
  • 行业市场分析
  • 授权加盟中心
  • 学员毕业薪资(不断更新中)
  • 加入尚观猎头服务(仅限老学员)
  • 学员交流论坛
  • OCP认证
  • Intel认证
  • RHCE认证
  • RHCE+OCP
  • RHCE+LPI


    您现在的位置:尚观Linux培训 - 嵌入式Linux培训专家尚观Linux培训 » Unix/Linux管理 » Oracle Data block 的物理结构

Oracle Data block 的物理结构

 
咨询热线
  • 免费咨询电话:
    400-700-0056
    800-810-0056

    教学就业监督电话:
    400-810-3016

  • QQ在线咨询:

    在线咨询

免费资源
  • -4月24日
  • [沈阳]Linux嵌入式-4月24日
  • [上海]DDos攻防-4月24日
  • [上海]Linux嵌入式-4月24日
  • [深圳]DDos攻防-4月24日
  • [深圳]Linux嵌入式-4月24日
  • [北京]DDos攻防-4月24日
  • 就业课程
  • 免费课程
  • 五万年薪就业保证课程

  • ULP-S 尚观王者IT集群课程
  • UEA-嵌入式内核驱动开发者
  • UGA-4G游戏与应用开发架构师
  • ULA-Linux系统与集群架构师
  • UOA-Oracle数据库集群架构
  • 八万年薪就业保证课程

  • UOM- Oracle集群大师
  • UEM-嵌入式开发大师
  • OCM考试指南全国免费公开课—全面解析及经验分享 7月17日
  • Linux网络攻击威胁分析以及Linux安全技巧 7月27日
  • 零基础轻松快速掌握嵌入式开发技术 7月14日
  • 4G手机游戏与应用高级开发实战课 8月31日
  • iPhone游戏及应用开发高级课程 7月12日
Linux培训●最新开班
  • [大连]ULA课程6月班热招!
  • [沈阳]UEA课程6月班热招!
  • [沈阳]ULA课程6月班热招!
  • [北京]UEA课程6月班热报!
  • [北京]UOA/ULA课程6月班!
  • [上海]UEA课程5月班热招!
  • [上海]ULA/UOA课程6月班!
  • [深圳]UEA课程6月班热招!
 
文章内容
  • 对data block物理结构的认识

        1.Data Block 物理结构图:

        2.一次对block的dump过程:

        PHP code:

    SQL> create table t9 (a varchar(10));

    Table created.

    SQL> insert into t9 values('a');

    1 row created.

    SQL> commit;

    Commit complete.

    SQL> set serveroutput on
    SQL> exec show_space('T9');
    Free Blocks.............................1
    Total Blocks............................8
    Total Bytes.............................65536
    Unused Blocks...........................6
    Unused Bytes............................49152
    Last Used Ext FileId....................3
    Last Used Ext BlockId...................121
    Last Used Block.........................2

    PL/SQL procedure successfully completed.

    SQL> alter system dump datafile 3 block 122;

    System altered.

    SQL> select * from v$tablespace;

           TS# NAME                           INC
    ---------- ------------------------------ ---
             0 SYSTEM                         YES
             1 UNDOTBS1                       YES
             8 USERS                          YES
            18 TEMP1

        Trace 文件:

    *** 2004-07-25 15:48:01.000

    Start dump data blocks tsn: 8 file#: 3 minblk 122 maxblk 122

    buffer tsn: 8 rdba: 0x00c0007a (3/122)

    scn: 0x0000.0068d716 seq: 0x01 flg: 0x02 tail: 0xd7160601

    frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

    Block header dump: 0x00c0007a

    Object id on Block? Y

    seg/obj: 0x806d csc: 0x00.68d714 itc: 2 flg: O typ: 1 - DATA

    fsl: 0 fnx: 0x0 ver: 0x01



    Itl Xid Uba Flag Lck Scn/Fsc

    0x01 0x0004.00b.00000fac 0x00801885.008c.56 --U- 1 fsc 0x0000.0068d716

    0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000



    data_block_dump,data header at 0x552105c

    ===============

    tsiz: 0x1fa0

    hsiz: 0x14

    pbl: 0x0552105c

    bdba: 0x00c0007a

    76543210

    flag=--------

    ntab=1

    nrow=1

    frre=-1

    fsbo=0x14

    fseo=0x1f9b

    avsp=0x1f83

    tosp=0x1f83

    0xe:pti[0] nrow=1 offs=0

    0x12:pri[0] offs=0x1f9b

    block_row_dump:

    tab 0, row 0, @0x1f9b

    tl: 5 fb: --H-FL-- lb: 0x1 cc: 1

    col 0: [ 1] 61

    end_of_block_dump

    End dump data blocks tsn: 8 file#: 3 minblk 122 maxblk 122

    3.先介绍数据块中包括的3种头信息:

        首先,数据块是通过data block buffer cache完成读和写操作的,所以它提供了20bytes的Cache Header和4bytes的 Tail给Cache,用来读取和管理。

        第2部分是为Transaction层提供的Header信息。它一共占据了48bytes,包括24bytes的控制信息,和一系列的Interested Transaction Slot (ITS)。

        剩下的部分都叫Data Area,用来存储用户数据。Data Area也包括data header,和row data及剩余空间。但是Cluster blocks, table blocks, index block的data header,row data结构是不相同的,这里主要介绍table blocks.

        4. 结合trace文件中的信息,详细介绍:

        1) The Cache Header and Tail:

        buffer tsn: 8 rdba: 0x00c0007a (3/122)

        scn: 0x0000.0068d716 seq: 0x01 flg: 0x02 tail: 0xd7160601

        frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

        Database block address: 占用4 bytes,表示Tablespace relative database block address(RDBA)。包括tns=8,即Tablespace number (User 表空间),file#=3, block_id=122

        SCN: 占用6bytes,表示最后变化的scn.包括2bytes的高位字节(SCN wrap),和4bytes的低位字节(SCN base)

        Sequence: 占用1byte,用途不明确,可能是辅助SCN的变化

        Flag: 占用1byte

        Format: 占用1byte,应该是用来区分版本。Oracle 8之前值为1,之后为2.

        Checksum: 占用2byte,跟db_block_checksum 参数有关系。

        引用oracle document 的解释:“DB_BLOCK_CHECKSUM determines whether DBWn and the direct loader will calculate a checksum (a number calculated from all the bytes stored in the block) and store it in the cache header of every data block when writing it to disk. Checksums are verified when a block is read-only if this parameter is true and the last write of the block stored a checksum. In addition, Oracle gives every log block a checksum before writing it to the current log.

        If this parameter is set to false, DBWn calculates checksums only for the SYSTEM tablespace, but not for user tablespaces.“

        Block type: 占用1byte,经常用到的有,1=undo segment header block; 2=undo data block; 5= data segment header block; 6=data block

        Unused: 保留的字节,占用4bytes,用来前后兼容。

        Tail 包括了SCN中SCN base的低位(low-order)2bytes,然后是block type,还有Sequence number.每当block 被读的时候,都要检查Tail与 block header 是否一致,保证了这个block不是损坏的(corrupted)。

        2) The Transaction Header:

        一共占据48bytes,包括24bytes的控制信息,和一系列的Interested Transaction Slot (ITS)。这些ITS组合在一起称为Interested Transaction List (ITL)。初始的ITL slot 数量由 INITRANS 决定(index branch block 只有1个slot)。如果有足够的剩余空间,oracle会根据需要动态的分配这些slot,直到受到空间限制或者达到了MAXTRANS.

    Block header dump: 0x00c0007a

    Object id on Block? Y

    seg/obj: 0x806d csc: 0x00.68d714 itc: 2 flg: O typ: 1 - DATA

    fsl: 0 fnx: 0x0 ver: 0x01



    Itl Xid Uba Flag Lck Scn/Fsc

    0x01 0x0004.00b.00000fac 0x00801885.008c.56 --U- 1 fsc 0x0000.0068d716

    0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000

        24bytes的控制信息包括:

        Object number(seg/obj): 占用4bytes,指在OBJ$中记录的segment 的 object number(0x806d=32877)

        Cleanout SCN(csc): 占用6bytes,最后一次 full cleanout 的scn

        ITL count(itc): 占用1byte,ITL 的slot数量。

        Flag: 占用2bytes.O表示这个block在freelist 上。否则flag为“-”

        Block type: 占用1byte.1=data; 2=index

        ITL freelist slot(fsl): 占用1byte.Index to the first slot on the ITL freelist

        Next freelist block(fnx): 占用4byte.Segment freelist中下一个block的RDBA

        Version: 1 byte

        Unused: 4bytes,用来前后兼容。

        每个ITL entry包括以下的内容:

        Transaction id(Xid): 8bytes.其中包括rollback segment number, transaction table中的slot number等。

        Undo block address(Uba): 8bytes.其中包括rollback segment block的DBA,sequence number等。

        Flags: 1nibble.—— = transaction is active, or committed pending cleanout C—— = transaction has been committed and locks cleaned out -B—— = this undo record contains the undo for this ITL entry——U- = transaction committed (maybe long ago); SCN is an upper bound——T = transaction was still active at block cleanout SCN

        Locks: 3nibbles. 也就是所谓的行级锁(row-level locks)

        SCN or free space credit: 6bytes. 如果这个事务已经clean out,这个值就是SCN;否则,前两个字节表示由这个事务释放的此block中的空间数。

        3)Data Area

        包括14bytes的data header,4bytes/table的table dictionary,2bytes/row的row dictionary.table dictionary主要用于cluster block中,只不过table block中的table dictionary只有一个table.

    data_block_dump,data header at 0x552105c

    ===============

    tsiz: 0x1fa0 ==> total data area size

    hsiz: 0x14 ==> data header size (14+ntabs*4 + nrows*2)

    pbl: 0x0552105c ==> pointer to buffer holding the block

    bdba: 0x00c0007a ==> block dba / rdba

    76543210

    flag=-------- ==> n=pctfree hit (clusters),f=don’t put on freelist, k=flushable cluster keys

    ntab=1 ==> number of tables (>1 so this is a cluster)

    nrow=1 ==> number of rows

    frre=-1

    fsbo=0x14 ==> free space begin offset

    fseo=0x1f9b ==> free space end offset

    avsp=0x1f83 ==> available space in the block

    tosp=0x1f83 ==> total available space when all transactions commit

    0xe:pti[0] nrow=1 offs=0

    0x12:pri[0] offs=0x1f9b

    block_row_dump:

    tab 0, row 0, @0x1f9b ==> 3bytes row header

    tl: 5 fb: --H-FL-- lb: 0x1 cc: 1

    col 0: [ 1] 61 ==> column length(1 byte if length<250; otherwise 3 bytes) and values

    end_of_block_dump

        5. 对于一个没有插入任何row的block来说,并且假设使用了默认的INITRANS,它的大小应该是:

    db_block_size- (cache header+ transaction header +data header + Tail + table dictionary*ntab + row dictionary*row )=8192 - ( 20+48+14+4+4 +0)=8192 - 90 =8102 bytes

        小结:

        这篇文章的目的在于给大家一个对data block的大概认识,和碰到问题时的一个参考。不是自己的,多研究,多做实验,把心得写出来,变成自己的。




    精彩Linux视频,免费先学!

    查看:尚观Linux培训学员最新就业薪资待遇统计报告!

    查看:UTA-高级研发型测试架构师大纲
    查看:UDA-Linux服务器开发架构师大纲
    查看:UEA-嵌入式内核驱动开发者大纲
    查看:UOA-Oracle数据库集群架构大纲
    查看:ULA-Linux系统与集群架构师大纲

    填表获取 Linux、嵌入式、Oracle 技术资料

  • 姓    名:
  • 固    话:
  • 手    机:
  • E-Mail :
  • 所在地:
  •         

北京(Beijing)

电子地图
电话:(010)62113016/17 68949060
地址:北京海淀区中关村南大街 甲10号 银海大厦南区410-418

上海(Shanghai)

电子地图
电话:(021)64859996 64859889
地址:上海徐汇区钦江路333号漕河泾开发区38号楼申能科技3楼

深圳(Shenzhen)

电子地图
电话:(0755)82995128 82995168
地址:深圳福田区 彩田路 中深花园B2005室

沈阳(Shenyang)

电子地图
电话:(024)31500816 31500817
地址:沈阳和平区三好街54号物产科贸大厦2号楼201室

大连(Dalian)

电子地图
电话:(0411)84336822 84326822
地址:大连沙河口区西安路86号行政大厦(罗斯福广场对面)17楼1705室

成都(Chengdu)

电子地图
电话:(028)66677820 66677828 66677829
地址:成都青羊区上西顺城街252号顺吉大厦8楼A3

2005-2009高新技术企业

LPI授权培训考试中心

CSDN战略伙伴

51Job战略伙伴

Oracle WDP授权培训与考试中心

Intel软件服务培训供应商

Redhat授权培训与考试中心

国家高新技术企业认证
 

友情链接(联系QQ:87865954):   LPI  RedHat  CSDN  ChinaUnix  ITPub  Eygle.Com  PHP中国  网易教育  Linux培训  嵌入式培训 
Linux联盟  21CN教育  Unix爱好者家园  ZOL服务器  广告联盟  Linux  嵌入式技术网  股票入门  大功率LED网   搜电网   网页制作
杭州写字楼网  时尚论坛  医药营销联盟  Linux技术中心  泉州人才网  广州招聘网  天天健康  上海商铺  北京赶集网  畅享网  SVN中文技术网 
网罗天下  工具软件下载  Oracle培训  北京法律咨询  天津赶集网  嵌入式资讯网  天极导航  Fedora中文爱好者  oklinux  沸点100网  Linux公社 
深圳本地宝  IT英才网  教培英才网  个人简历模板  中国二手车城  连锁加盟  天极网南京站

COPYRIGHT © 2000-2009 北京尚观科技有限公司 - Linux培训及嵌入式培训专家 ALL RIGHTS RESERVED

咨询热线:400-700-0056    800-810-0056
京ICP备05058027号 | Linux就业信息 | 免责声明 |