dsi401_block structure(一)

/***oracle dsi 401 block结构****/

1,data block分成3部分:
   cache layer
      transaction layer
      data layer
     
2,rowid 2种使用途径
   1,基于索引的扫描
     2,正常访问不能提取表数据(如表块损坏),可基于rowid提取数据
3,rowid解析
     1,solaris有一个工具rowid工具,直接可以解析rowid各组个含义
4,block dump
     有2种方法;
       1,直接采用os最原始的dump
         2,oracle dump
        
         1,直接采用os最原始的dump
             基于unix dd工具
               示例:dd if=system01.dbf bs=4k skip=99 count=3|od -xv>file.out
               dd各选项语义:
                            if ---dump文件名
                            bs ---oracle 数据库大小
                            skip ---偏移多少数据块
                            count --dump多少数据块
                            od --八进制工具
                            x  --转化八进制为十六进制
                            v  --详细输出,如无此选项,相同的行皆替代的*
                           
                            还要最重要的一点:dd的=两边不能有空格
                           
                           
5,block layout
    type
    format
    filler
    rdba
    scnbase
    scnwrap
    seq --基于同一个scn的递增序列号
    flag --新块,延迟块,临时块等
    checkvalue --用于验证
    data block body
    tail      --用于验证数据块的完整性,由scnbase的低2byte+block type+scn seq
    (注:如果基于同一个scn变更了245次,如果下次变更会分配一个新的scn 
     在11g,如果基于同一个scn对数据库更新245次,再有新的更新,scn不会重设置为新的scn)
    
dd产生的dump文件
  1,切记od会自动添加一个offset列,此列为八进制,它并非是dump文件一部分内容
 
----------------------------------------------------------------------------------------
seg/obj --seg/obj id
csc :  --最新一次块清清除的scn
itc    ---itl slots的编号
flag   ---在freelist块的的状态
typ    --数据块的类型,data or index
fsl    --11g deprecated,itl tx freelist slot
fnx    ---在freelist上的下个数据块的dba
itl    --itl index
xid    ---事务id,由undo seg.slot.wrap
uba    --undo地址,由undodba.seqno.recordno
flg    --c=commited;u=commit upper bound;t=active at csc
lock   --事务锁定记录数
scn/fsc  --scn=事务提交的scn;fsc=free space credit(bytes)

注:如表空间用用自动段空间管理方式,则fsl和fnx会被dba range number,opcode,第一个位图块dba和数据块的incarnation number替代


基于上述上个示例:

Block header dump:  0x028b583b
 Object id on Block? Y
 seg/obj: 0x114a1  csc: 0x00.b0be29  itc: 2  flg: E  typ: 1 - DATA --scn未发变化
     brn: 0  bdba: 0x28b5838 ver: 0x01 opc: 0
     inc: 0  exflg: 0


/******数据部分*******/
data_block_dump,data header at 0x19fd8264
===============
tsiz: 0x1f98 --数据的总大小
hsiz: 0x18   --数据块的块头大小
pbl: 0x19fd8264 --数据块所属缓冲的指针
     76543210
flag=-------- --N表示pctfree hit(cluster);F表示未在free list;K表示可刷新的cluster keys
ntab=1 --数据块包含的表个数,如是cluster,则>1
nrow=3 --数据块包含的记录数
frre=-1 --第一个空闲记录索引条目,-1表示必须要添加一个
fsbo=0x18 --空闲空间的开始偏移量
fseo=0x1023 --空闲空间结束偏移量
avsp=0x1f65 --数据块中的可用空间
tosp=0x1f65 --数据块中所有事务提交后的全部可用空间
0xe:pti[0] nrow=3 offs=0 --nrows表示第一个表的记录数
0x12:pri[0] offs=0x102f --offs表示每条记录的偏移地址
0x14:pri[1] offs=0x1029
0x16:pri[2] offs=0x1023

 

/*****表记录部分dump**********/
block_row_dump:
tab 0, row 0, @0x102f --这个@前缀即上述的offs的行所在的偏移地址
tl: 6 fb: --H-FL-- lb: 0x0  cc: 1 --tl为记录大小,由byte数加上数据
col  0: [ 2]  c3 03    ---col为表中列的真正数据
tab 0, row 1, @0x1029
tl: 6 fb: --H-FL-- lb: 0x0  cc: 1 --lb为lock byte,即表明itl事务是否锁住此记录,值1 为未提交,0 为提交
col  0: [ 2]  c3 03
tab 0, row 2, @0x1023

--fb表示flag byte,H=head of row piece;K=cluster key;c=cluster table member;d=deleted row;f=first data piece;l=last data piece;
---p=first column continues from previous piece;n=last column continues in next piece;
/***在一个数据块中有data piece的概念***/
tl: 6 fb: --H-FL-- lb: 0x0  cc: 1  --cc表示行中多少个列
col  0: [ 2]  c3 03
tab 0, row 3, @0x101c
tl: 7 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 3]  c2 2d 2d
end_of_block_dump

                                  
                                  
/***unix提从了ascii到hex的转换,可以man ascii***/                                      

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-757718/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-757718/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值