Undo Header Dump
EXEM Knowledge Base
데이터 블록을 변경한 트랜잭션이 사용하는 언두 세그먼트(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
-- 언두 세그먼트 번호는 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;
언두 헤더 블록의 덤프 내용은 다음과 같다.
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
언두 헤더 블록의 트랜잭션 테이블(TRN TBL)의 38번 슬롯(index=0x26)에 Update를 수행한 트랜잭션에 대한 정보가 기록되어 있음을 확인할 수 있다.