73424 4 195 71 AAAR7QAAEAAAADDABH 4704 SUBPTXT VIEW
SQL> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec,to_char(start_scnw,'xxxxxxxx') start_scnw,
2 to_char(start_scnb,'xxxxxxxx') start_scnb, start_scnb+start_scnw*power(2,32) start_scn
3 from v$transaction;
XIDUSN XIDSLOT XIDSQN UBABLK UBAFIL UBAREC START_SCNW START_SCNB START_SCN
---------- ---------- ---------- ---------- ---------- ---------- -------------------- -------------------- ----------
19 0 4 258 5 2 0 0 0
SQL> select name from v$rollname where usn=19;
NAME
------------------------------
_SYSSMU19$
(3)刷新内存,dump数据块,undo 段头,undo block,如下
SQL> alter system flush buffer_cache;
System altered.
SQL> oradebug
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u01/oracle/diag/rdbms/test/test/trace/test_ora_902.trc
SQL> alter system dump datafile 4 block 195;
System altered.
SQL> alter system dump undo header '_SYSSMU19$';
System altered.
SQL> alter system dump datafile 5 block 258;
System altered.
(4)分析数据块dump文件
Block header dump: 0x010000c3
Object id on Block Y
seg/obj: 0x11ed0 csc: 0x00.f2e95 itc: 3 flg: E typ: 1 - DATA
brn: 1 bdba: 0x10000b8 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0xffff.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.000f2e95
0x02 0x0013.000.00000004 0x01400102.0001.02 ---- 2 fsc 0x000a.00000000
0x03 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
uba中undo record参数为2,即这个事务在这个数据块上的变更(修改)产生的undo记录(变更旧值记录)在对应的undo数据块中的开始地址(开始偏移量)
bdba: 0x010000c3
data_block_dump,data header at 0x2b0a86e2da7c
.....省略一部分..........
tab 0, row 70, @0x45f
tl: 25 fb: --H-FL-- lb: 0x2 cc: 4 ---这一行数据被锁定,锁定该行数据的事务为ITL事务槽中的第二个事务。
col 0: [ 3] c2 30 04
col 1: [ 3] c2 30 48
col 2: [ 8] 53 55 42 50 54 58 54 32
col 3: [ 4] 56 49 45 57
tab 0, row 71, @0x447
tl: 24 fb: --H-FL-- lb: 0x2 cc: 4 ---这一行数据被锁定,锁定该行数据的事务为ITL事务槽中的第二个事务。
col 0: [ 3] c2 30 05
col 1: [ 3] c2 30 49
col 2: [ 7] 53 55 42 50 54 58 54
col 3: [ 4] 56 49 45 57
.........省略trace 文件中后面的输出.............
(5)分析undo 段头dump文件
********************************************************************************
Undo Segment: _SYSSMU19$ (19)
********************************************************************************
Extent Control Header
-----------------------------------------------------------------
............省略中间一部分................
Retention Table
-----------------------------------------------------------
Extent Number:0 Commit Time: 0
Extent Number:1 Commit Time: 0
TRN CTL:: seq: 0x0001 chd: 0x0001 ctl: 0x0021 inc: 0x00000000 nfb: 0x0000
mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x01400102.0001.01 scn: 0x0000.000e61e6
这个uba经过测试验证,为事务表中最后(最新)一个事务的对应的undo block上的第一个undo record,即当这个回滚段头存在多个事务时,这个uba表示最新的事务的uba地址,这个地址在整个事务的周期内不发生改变(除非这个回滚段头上又分配了一个新的事务表),因此,这个地址指向的是事务使用的第一个undo block
Version: 0x01
FREE BLOCK POOL::
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0