dsi401_block structure(一)

wisdomone1發表於2013-04-03

/***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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章