2017.10.18
Undo Header Dump
データブロックを変更したトランザクションが使用するUNDOセグメント(USN=22)のヘッダブロックをダンプすると、トランザクションに対応する情報がどのように管理されるかを確認することができます。
SQL> select xidusn,xidslot,xidsqn from v$transaction where addr = (select taddr from v$session where sid = 162); XIDUSN XIDSLOT XIDSQN ---------- ---------- ---------- 22 38 12834 → USN=22, Slot=38 -- UNDOセグメント番号は22であり、トランザクションテーブルからのスロットの位置は、38であることを確認出来ます。 SQL> select file_id, block_id from dba_rollback_segs where segment_id = 22; FILE_ID BLOCK_ID ---------- ---------- 7 57 SQL> alter system dump datafile 7 block 57;
UNDOヘッダブロックのダンプ内容は次のとおりです。
Start dump data blocks tsn: 5 file#: 7 minblk 57 maxblk 57 buffer tsn: 5 rdba: 0x01c00039 (7/57) scn: 0x0000.02ec5e6b seq: 0x01 flg: 0x04 tail: 0x5e6b2601 frmt: 0x02 chkval: 0xa2af type: 0x26=KTU SMU HEADER BLOCK Extent Control Header ----------------------------------------------------------------- Extent Header:: spare1: 0 spare2: 0 #extents: 3 #blocks: 143 last map 0x00000000 #maps: 0 offset: 4080 ... Retention Table ? Retention Table : Flashback 機能と関連があります。 ----------------------------------------------------------- Extent Number:0 Commit Time: 1138602915 ... TRN TBL:: → トランザクションテーブル index state cflags wrap# uel scn dba ---------------------------------------------------------------- parent-xid nub stmt_num cmt -------------------------------- 0x00 9 0x00 0x3222 0x0002 0x0000.02ec5d39 0x01c0003d 0x0000.000.00000000 0x00000001 0x00000000 1138603151 ... 0x26 10 0x80 0x3222 0x0000 0x0000.02ec5e30 0x01c0003f 0x0000.000.00000000 0x00000001 0x00000000 0 ... ? 0x26 = 38 ですので、このスロットは、私たちが観察したいトランザクション情報です。 0x2f 9 0x00 0x3221 0x0000 0x0000.02ec5d38 0x01c0003d 0x0000.000.00000000 0x00000001 0x00000000 1138603151 End dump data blocks tsn: 5 file#: 7 minblk 57 maxblk 57
UNDOヘッダブロックのトランザクションテーブル(TRN TBL)の38番スロット(index=0x26)にUpdateを実行したトランザクションに関する情報が記録されていることを確認することができます。
