下面从dump的undo块中截取的undo record
*-----------------------------
* Rec #0x33 slt: 0x01 objn: 120296(0x0001d5e8) objd: 120296 tblspc: 11(0x0000000b)
* Layer: 11 (Row) opc: 1 rci 0x32
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*-----------------------------
KDO undo record:
KTB Redo
op: 0x02 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: C uba: 0x00c31bdf.4e1f.32
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x028f97b3 hdba: 0x028f97b2
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 99(0x63) flag: 0x2c lock: 0 ckix: 9
ncol: 2 nnew: 1 size: 0
col 1: [20] cc ec bd f2 ca d0 bb e3 b5 ea cd a8 b4 f3 d2 a9 b7 bf 20 20
*-----------------------------
* Rec #0x34 slt: 0x01 objn: 120296(0x0001d5e8) objd: 120296 tblspc: 11(0x0000000b)
………………
objd: 120296 对应ROWID中的DATA_OBJECT_ID#
bdba: 0x028f97b3 对应ROWID中的rfile#,block#
slot: 99(0x63) 对应ROWID中的ROW#
select to_number('028f97b3','xxxxxxxx') from dual; --42964915
select dbms_utility.data_block_address_block(42964915) "block",
dbms_utility.data_block_address_file(42964915) "file" from dual;
--1021875 10
通过如下计算:
obj#=120296=11101 010111 101000=29 23 40=d X o,补足成6位base64编码,左边填0,也就是A,结果为AAAdXo
rfile#=10=1010=10=K,补足成3位,得到AAK
block#=1021875=11 111001 011110 110011=3 57 30 51=D 5 e z,补足成6位,得到AAD5ez
row#=99=1 100011=1 35=B j,3位ABj
合起来就是AAAdXoAAKAAD5ezABj
这个也正是我修改的那一行数据。