SQL> insert into tt select * from dba_objects;
已创建40231行。
SQL> select ubafil,ubablk,start_ubablk,used_ublk from v$transaction;
UBAFIL UBABLK START_UBABLK USED_UBLK
---------- ---------- ------------ ----------
2 183 99 19
SQL> select segment_name,extent_id,file_id,block_id from dba_extents where segme
nt_name='RBS1';
SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID
-------------------- ---------- ---------- ----------
RBS1 0 2 97
RBS1 1 2 169
RBS1 2 2 177
RBS1 3 2 185
RBS1 4 2 193
SQL>
这里的START_UBABLK表示事务使用的undo起始block,而UBABLK表示的是最后一个被使用的undo block,
所有这些block组成了一个从最后一个指向前一个的单向list,在这些block的内部从每一个block的第一
个rec开始下面有一个rdba,这个rdba记录的就是它前面的一个block,我们先dump 一下183(last block
)来看一下:
SQL> alter system dump datafile 2 block 183;
系统已更改。
dump 内容如下:
*-----------------------------
* Rec #0x1 slt: 0x01 objn: 40926(0x00009fde) objd: 41117 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x008000b6
把上面的rdba: 0x008000b6转化为对应的block#:
SQL> select dbms_utility.data_block_address_block(to_number('008000b6','xxxxxxxx
')) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('008000B6','XXXXXXXX'))
-----------------------------------------------------------------------
182
--=================================
再来dump一下extent_id=1的第一个block 169来看看:
SQL> alter system dump datafile 2 block 169;
系统已更改。
dump内容:
*-----------------------------
* Rec #0x1 slt: 0x01 objn: 40926(0x00009fde) objd: 41117 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00800068
*-----------------------------
转化一下:
SQL> select dbms_utility.data_block_address_block(to_number('00800068','xxxxxxxx
')) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('00800068','XXXXXXXX'))
-----------------------------------------------------------------------
104
block#=104的block不正是extent_id=0的最后一个block
--=================================
再来dump一下177看一下:
SQL> alter system dump datafile 2 block 177;
系统已更改。
dump内容:
*-----------------------------
* Rec #0x1 slt: 0x01 objn: 40926(0x00009fde) objd: 41117 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x008000b0
*-----------------------------
转化一下:
SQL> select dbms_utility.data_block_address_block(to_number('008000b0','xxxxxxxx
')) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('008000B0','XXXXXXXX'))
-----------------------------------------------------------------------
176
dump 176:
SQL> alter system dump datafile 2 block 176;
系统已更改。
dump内容:
*-----------------------------
* Rec #0x1 slt: 0x01 objn: 40926(0x00009fde) objd: 41117 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x008000af
*-----------------------------
转化一下:
SQL> select dbms_utility.data_block_address_block(to_number('008000af','xxxxxxxx
')) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('008000AF','XXXXXXXX'))
-----------------------------------------------------------------------
175
最后我们来dump一下这个transaction使用的第一个block 99:
SQL> alter system dump datafile 2 block 99;
系统已更改。
dump内容:
*-----------------------------
* Rec #0x1 slt: 0x00 objn: 0(0x00000000) objd: 0 tblspc: 0(0x00000000)
* Layer: 5 (Transaction Undo) opc: 7 rci 0x00
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*-----------------------------
发现它的rdba: 0x00000000
这个0x00000000代表的是不指向任何block还是指向自身?大家自己去理解吧
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1007953/ ,如需转载,请注明出处,否则将追究法律责任。