update一条语句的来龙去脉(三)

2014-11-24 14:31:50 · 作者: · 浏览: 2
-----------------------
0x1f 10 0x80 0x10bc 0x0013 0x0000.0050c823 0x024092df 0x0000.000.00000000 0x00000001 0x00000000 0
UNDO BLK:
xid: 0x0014.01f.000010bc seq: 0x5b cnt: 0x1 irb: 0x1 icl: 0x0 flg: 0x0000
Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset
---------------------------------------------------------------------------
0x01 0x1f48
################################################################
总结:这是第一步:首先要在undo空间中分配事务槽等信息:
CHANGE #2 TYP:1 CLS:56 AFN:9 DBA:0x024092df OBJ:4294967295 SCN:0x0000.0050c823 SEQ:1 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 160 spc: 0 flg: 0x000a seq: 0x005b rec: 0x01
xid: 0x0014.01f.000010bc
ktubl redo: slt: 31 rci: 0 opc: 11.1 [objn: 89179 objd: 89716 tsn: 8]
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
0x00000000 prev ctl uba: 0x024092de.005b.25
prev ctl max cmt scn: 0x0000.005072ce prev tx cmt scn: 0x0000.0050730f
txn start scn: 0xffff.ffffffff logon user: 92 prev brb: 37786328 prev bcl: 0 BuExt idx: 0 flg2: 0
KDO undo record:
KTB Redo
op: 0x03 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: Z
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01c0296e hdba: 0x01c0296a
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 0
ncol: 8 nnew: 1 size: -1
col 1: [ 3] 41 4d 59
从第二个向量中可以获得的信息有:相对文件号为:9,数据的前镜像地址为dba:数据文件号为9,数据块为:37599,redo的操作码:op:5.1(Opcode 1 : Undo block or undo segment header - KTURDB),可以看到这里的事务号:xid: 0x0014.01f.000010bc获得回滚段为20事务槽位31wrap为10bc,后边记录的: slt: 31 rci: 0 opc: 11.1 [objn: 89179 objd: 89716 tsn: 8]表示:事务槽为31,rci为0说明这是在undo chain中最后一个的记录,对象变化为89179,数据对象变化为89716 tsn:为8,如下查询可知道正是我操作的这张表。另外登录的用户为rhys(通过92可知),然后在记录的就是前字段值为:41 4d 59转储为:AMY这正是原先字段值。如下是获得部分信息的查询操作:
SQL> col object_name for a50
SQL> r
1* select object_name,object_id,data_object_id,object_type from dba_objects where object_id=89179
OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
-------------------------------------------------- ---------- -------------- -------------------
EMP 89179 89716 TABLE
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 STATSPACK YES NO YES
8 RHYS YES NO YES
9 INDEX_TABLESPACE YES NO YES
10 UNDOTBS02 YES NO YES
9 rows selected.
SQL> select username,user_id from dba_users where user_id=92;
USERNAME USER_ID
------------------------------ ----------
RHYS 92
SQL>
SQL> col value for a40
SQL> r
1* select utl_raw.cast_to_varchar2(replace('41 4d 59',' ')) value from dual
VALUE
----------------------------------------
AMY
SQL>
这是第三个改变向量。
CHANGE #3 TYP:2 CLS:1 AFN:7 DBA:0x01c0296e OBJ:89716 SCN:0x0000.00505633 SEQ:1 OP:11.5 ENC:0 RBL:0
KTB Redo
op: 0x11 ver: 0x01
compat bit: 4