Oracle Block scn/commit scn/cleanout scn说明(四)
0000.00 ext: 0x0 spc: 0x0
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
TRNTBL::
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0007 0x0001 0x0000.80046548 0x01c00068 0x0000.000.00000000 0x00000001 0x00000000 1312472853
0x01 9 0x00 0x0007 0x0002 0x0000.80046554 0x01c00068 0x0000.000.00000000 0x00000001 0x00000000 1312472853
0x02 9 0x00 0x0007 0x0003 0x0000.80046560 0x01c00079 0x0000.000.00000000 0x00000001 0x00000000 1312472853
0x03 9 0x00 0x0007 0x0004 0x0000.8004656c 0x01c00079 0x0000.000.00000000 0x00000001
--dump block 115346
SYS@dave2(db2)> alter system dumpdatafile 1 block 115346;
System altered.
SYS@dave2(db2)> oradebug tracefile_name
/u01/app/oracle/admin/dave2/udump/dave2_ora_11079.trc
Start dump data blocks tsn: 0 file#: 1minblk 115346 maxblk 115346
buffer tsn: 0 rdba: 0x0041c292 (1/115346)
scn: 0x0000.80046634 seq:0x01 flg: 0x04 tail: 0x66340601
--这个scn 就是blockscn,将 0x0000.80046634转成数字:
SYS@dave2(db2)> select to_number('80046634','xxxxxxxxx')from dual;
TO_NUMBER('80046634','XXXXXXXXX')
---------------------------------
2147771956
该值与前面延时块清除时的SCN:2147771961差不多,所以这里应该是延时块清除的时候的scn。
frmt: 0x02 chkval: 0x2974 type: 0x06=transdata
.....
Block header dump: 0x0041c292
Object id on Block Y
seg/obj: 0xdf46 csc: 0x00.80046634 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0010.012.00000005 0x01c0005e.0001.25 C-U- 0 scn 0x0000.800463c6
0x02 0x000f.008.00000005 0x01c00051.0002.17 C--- 0 scn 0x0000.80045e0b
其中ITL 中的XID 格式为:usn#.slot#.wrap#
SYS@dave2(db2)> selectto_number('10','xxxxxxxxxxx') from dual;
TO_NUMBER('10','XXXXXXXXXXX')
-----------------------------
16
SYS@dave2(db2)> select to_number('12','xxxxxxxxxxx')from dual;
TO_NUMBER('12','XXXXXXXXXXX')
-----------------------------
18
SYS@dave2(db2)> selectto_number('00000005','xxxxxxxxxxx') from dual;
TO_NUMBER('00000005','XXXXXXXXXXX')
-----------------------------------
5
和之前V$TRANSACTION查询的一致。
SYS@dave2(db2)> selectto_number('800463c6','xxxxxxxxxxx') from dual;
TO_NUMBER('800463C6','XXXXXXXXXXX')
-----------------------------------
2147771334
--等于最后一次commit的SCN
SYS@dave2(db2)> select to_number('80045e0b','xxxxxxxxxxx')from dual;
TO_NUMBER('80045E0B','XXXXXXXXXXX')
-----------------------------------
2147769867
说明:
在前面提到,当slot重用时,更新对应itl上scn为control scn。 但是我这里的dump undo的control SCN 为2147771636。但itl 的scn为2147771334,是最后一次commit的SCN. 所以说这个测试并没有证明这个结论。实验步骤还有待重新完善。
题外话一句: 结果有时候并不重要,重要的是分析的过程。