oracle資料塊dump檔案中ITL詳解

atlantisholic發表於2011-05-11

dump出Oracle block後,可以看到事物槽,包含有事物槽號(ITL),XID,UBA,FLAG,LCK,SCN。
本文主要討論FLAG標記的規則,其中FLAG在block中佔用1個位元組大小。

data block的dump資訊中ITL中的xid:0x000c.011.000000e6是由undo資訊組成的:xidusn.xidslot.xidsqn(wrap#)
data block的dump資訊中ITL中的uba:0x00800554.00d6.28是由uba(undo block address).UBASQN.UBAREC
我們知道FLAG各種標記位代表不同意思,以下為不同標記位代表不同意思:
—- = 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
看上面的標記位有一定的規律可循,以下為測試過程,其中07代表鎖的行數

BBED>  modify 0×0700

Itl                    Xid                                              Uba                Flag          Lck              Scn/Fsc
0×01   0×0023.02f.0000004e          0×0280073e.0010.2b       –U-           3               fsc 0×0000.0811d995
0×02   0×0029.02d.0000004d         0×028008c5.0010.37       —-            7               fsc 0×0a00.0811d8b7

 

以下為事務內部流程圖:
圖片
1.事務開始時,需要在回滾段事務表上分配一個事務槽(alter system dump undo header '回滾段名稱');

2.在資料塊頭部獲取一個ITL事務槽,該事務槽指向回滾段頭的事務槽(alter system dump datafile .. block ..);

3.在修改資料之前,需要記錄前映象資訊,這個資訊以UNDO RECORD的形式儲存在回滾段中,回滾段頭指向該記錄

(通過回滾段頭事務表的資訊,alter system dump datafile .. block ..檢視回滾記錄);

4.鎖定修改行,修改行鎖定位(lb-lock byte)指向ITL事務槽,可以dump資料塊檢視;

5.資料修改可以進行;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23071790/viewspace-695046/,如需轉載,請註明出處,否則將追究法律責任。

相關文章