oracle回滚机制的深入探究(二)

2014-11-24 09:44:39 · 作者: · 浏览: 2
ate cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0162 0x0029 0x0000.000d2ab9 0x00800613 0x0000.000.00000000 0x00000001 0x00000000 1344280244
............................................
0x1a 10 0x80 0x0162 0x0002 0x0000.00000000 0x00800615 0x0000.000.00000000 0x00000001 0x00000000 0
............................................
这就是神秘的回滚段头的信息,其中包括事务表信息。其中,0x1a是个16进制数,转成10进制: www.2cto.com
[sql]
scott@ORCL> select to_number('1a','xx') from dual;
TO_NUMBER('1A','XX')
--------------------
26
由此,可知:0x1a为26.回顾前面的事务信息,该事务正好占用的是第26号事务槽,状态(state)为10代表的是活动事务。
dump旧值信息
段头信息的第七列:dba(data block address),指的就是回滚块的地址0x00800615
下面把dba翻译一下
[sql]
sys@ORCL> select to_number('00800615','xxxxxxxx') from dual;
TO_NUMBER('00800615','XXXXXXXX')
--------------------------------
8390165
www.2cto.com
sys@ORCL> select dbms_utility.data_block_address_file(8390165) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(8390165)
---------------------------------------------
2
sys@ORCL> select dbms_utility.data_block_address_block(8390165) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(8390165)
----------------------------------------------
1557
由此,可知:旧值在2号文件的第1557个回滚块上
这与从v$transaction查询得到的数据完全一致:
[sql]
sys@ORCL>
select ubafil,ubablk from v$transaction;
UBAFIL UBABLK
---------- ----------
2 1557
回到会话1,继续DML事务:scott用户
[sql]
scott@ORCL> update emp set sal=4000 where empno=7788;
1 row updated.
www.2cto.com
scott@ORCL> update emp set sal=4000 where empno=7782;
1 row updated.
scott@ORCL> update emp set sal=40000 where empno=7698;
1 row updated.
会话2:sys用户
把回滚块1557dump出来
[sql]
sys@ORCL> select spid from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat where rownum=1));
SPID
------------
11146
sys@ORCL> alter system dump datafile 2 block 1557;
www.2cto.com
System altered.
回滚块1557里面开头的信息部分如下:
[sql]
*** 2012-08-07 16:31:42.449
*** SERVICE NAME:(SYS$USERS) 2012-08-07 16:31:42.355
*** SESSION ID:(135.102) 2012-08-07 16:31:42.355
Start dump data blocks tsn: 1 file#: 2 minblk 1557 maxblk 1557
buffer tsn: 1 rdba: 0x00800615 (2/1557)
scn: 0x0000.000d36d2 seq: 0x01 flg: 0x04 tail: 0x36d20201
frmt: 0x02 chkval: 0xbeca type: 0x02=KTU UNDO BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0E7E4400 to 0x0E7E6400
......................
********************************************************************************
UNDO BLK:
xid: 0x0009.01a.00000162 seq: 0x105 cnt: 0x14 irb: 0x14 icl: 0x0 flg: 0x0000
Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset
---------------------------------------------------------------------------
0x