undo segment header中記錄的dba是該事務使用的單向連結串列中的頭(end block)!

warehouse發表於2009-03-19
以前寫過一篇文章介紹事務使用的undo block其實一條單向
連結串列,那麼undo header上記錄的dba到底是這條單向連結串列的
頭還是尾,經驗證是頭,我猜測也應該是頭,因為當rollback
事務時才能以最快的速度找到rollback的起點,當然這樣做的
目的可能不僅僅是為了rollback操作。[@more@]

SQL> create table tt1 tablespace users as select *from dba_objects;

表已建立。

SQL> insert into tt1 select * from tt1;

已建立11280行。
SQL> select xidusn,ubafil,ubablk,start_ubafil,start_ubablk from v$transaction;

XIDUSN UBAFIL UBABLK START_UBAFIL START_UBABLK
---------- ---------- ---------- ------------ ------------
14 7 61 7 180

SQL> alter system dump undo header "_SYSSMU14$";

系統已更改。
--dump資訊如下:
--======================
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
.............
0x12 10 0x80 0x0992 0x0001 0x0000.018e34c1 0x01c0003d 0x0000.000.00000000 0x00000006 0x00000000 0
..............
--=======================

SQL> select dbms_utility.data_block_address_file(to_number('01c0003d','xxxxxxxx'
)) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(TO_NUMBER('01C0003D','XXXXXXXX'))
----------------------------------------------------------------------
7

SQL> select dbms_utility.data_block_address_block(to_number('01c0003d','xxxxxxxx
')) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('01C0003D','XXXXXXXX'))
-----------------------------------------------------------------------
61
--很顯然,undo segment header中記錄的dba是該
事務使用的undo chain中的end block:61,start block是:180,而end block這是這條chain的頭。

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

相關文章