首先创建一张表test1
create table test1 (id number(10),info1 char(2000),info2 char(2000));
插入一行
insert into test1 values(1,'aaa','bbb');
commit;
select rowid from test1;
------
ROWID
AAAQniAAFAAAG/zAAA
从rowid得到该数据块在datafile 5,block 28659中。
alter system dump datafile 5 block 28659;
-----------------
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x0d317c64
bdba: 0x01406ff3
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0xfec
avsp=0xfd8
tosp=0xfd8
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0xfec
block_row_dump:
tab 0, row 0, @0xfec
tl: 4012 fb: --H-FL-- lb: 0x1 cc: 3
col 0: [ 2] c1 02
col 1: [2000]
61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
col 2: [2000]
62 62 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
-----------------
这时我增加一列:
alter table test1 add lraw long raw;
并且更新lraw为字节数9000的字符串。
重新dump
alter system dump datafile 5 block 28659;
------------------------------
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x0d317c64
bdba: 0x01406ff3
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0xbbc
avsp=0xba8
tosp=0xba8
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0xbbc
block_row_dump:
tab 0, row 0, @0xbbc
tl: 5084 fb: --H-F--N lb: 0x2 cc: 4
nrid: 0x01406ff5.0
col 0: [ 2] c1 02
col 1: [2000]
61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
col 2: [2000]
62 62 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
col 3: [1063]
61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
省略。。。
------------------------------
可以看到产生了row chaining,有nrid: 0x01406ff5.0,说明有另外一部分数据在数据文件5,数据块28661中(从bdba可以直接得出数据在哪个文件的哪个块中,0x140是数据文件号乘以64,0x6ff5是数据块号。)
dump另一部分的数据
alter system dump datafile 5 block 28661.
-------------------------------
tsiz: 0x1f80
hsiz: 0x14
pbl: 0x0d317c7c
bdba: 0x01406ff5
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x79
avsp=0x65
tosp=0x65
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x79
block_row_dump:
tab 0, row 0, @0x79
tl: 7943 fb: -----LP- lb: 0x1 cc: 1
col 0: [7937]
61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
省略。。。
-------------------------------
然后删除刚加的那一列
alter table test1 drop column lraw;
再次dump数据文件
------------------------tsiz: 0x1f98
hsiz: 0x14
pbl: 0x0d317c64
bdba: 0x01406ff3
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0xbbc
avsp=0xba8
tosp=0xfd8
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0xbbc
block_row_dump:
tab 0, row 0, @0xbbc
tl: 4012 fb: --H-FL-- lb: 0x1 cc: 3
col 0: [ 2] c1 02
col 1: [2000]
61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
col 2: [2000]
62 62 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
省略。。。
----------------------------------
和第一次dump出来的是一致的。
所以推测redo信息里会有去掉nrid的信息。
REDO RECORD - Thread:1 RBA: 0x00034e.0000000c.01d8 LEN: 0x2058 VLD: 0x01
SCN: 0x0000.0106632d SUBSCN: 3 05/31/2011 12:07:07
CHANGE #1 TYP:0 CLS:33 AFN:2 DBA:0x00800089 OBJ:4294967295 SCN:0x0000.0106632d SEQ: 1 OP:5.2
ktudh redo: slt: 0x0008 sqn: 0x00000000 flg: 0x000a siz: 8036 fbi: 232
uba: 0x0080099b.0e3f.01 pxid: 0x0000.000.00000000
CHANGE #2 TYP:1 CLS:34 AFN:2 DBA:0x0080099b OBJ:4294967295 SCN:0x0000.0106632d SEQ: 1 OP:5.1
ktudb redo: siz: 8036 spc: 1116 flg: 0x000a seq: 0x0e3f rec: 0x01
xid: 0x0009.008.000025c4
ktubu redo: slt: 8 rci: 0 opc: 11.1 objn: 68066 objd: 68066 tsn: 6
Undo type: Regular undo Undo type: Last buffer split: No
Tablespace Undo: No
0x00800999
KDO undo record:
KTB Redo
op: 0x03 ver: 0x01
op: Z
KDO Op code: IRP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01406ff5 hdba: 0x01406feb
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) size/delt: 7943
fb: -----LP- lb: 0x0 cc: 1
null: -
col 0: [7937]
61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
省略。。。
CHANGE #3 TYP:2 CLS: 1 AFN:5 DBA:0x01406ff5 OBJ:68066 SCN:0x0000.01065a64 SEQ: 1 OP:11.3
KTB Redo
op: 0x11 ver: 0x01
op: F xid: 0x0009.008.000025c4 uba: 0x0080099b.0e3f.01
Block cleanout record, scn: 0x0000.0106632d ver: 0x01 opt: 0x02, entries follow...
itli: 1 flg: 2 scn: 0x0000.01065a64
KDO Op code: DRP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01406ff5 hdba: 0x01406feb
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0)
REDO RECORD - Thread:1 RBA: 0x00034e.0000001d.0184 LEN: 0x00e8 VLD: 0x01
SCN: 0x0000.0106632d SUBSCN: 5 05/31/2011 12:07:07
CHANGE #1 TYP:0 CLS:34 AFN:2 DBA:0x0080099b OBJ:4294967295 SCN:0x0000.0106632d SEQ: 2 OP:5.1
ktudb redo: siz: 80 spc: 112 flg: 0x0022 seq: 0x0e3f rec: 0x02
xid: 0x0009.008.000025c4
ktubu redo: slt: 8 rci: 1 opc: 11.1 objn: 68066 objd: 68066 tsn: 6
Undo type: Regular undo Undo type: Last buffer split: No
Tablespace Undo: No
0x00000000
KDO undo record:
KTB Redo
op: 0x02 ver: 0x01
op: C uba: 0x00800999.0e3f.1d
KDO Op code: CFA row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01406ff3 hdba: 0x01406feb
itli: 1 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) flag: 0x00
lock: 1 nrid: 0x01406ff5.0
CHANGE #2 TYP:0 CLS: 1 AFN:5 DBA:0x01406ff3 OBJ:68066 SCN:0x0000.0106632d SEQ: 1 OP:11.8
KTB Redo
op: 0x02 ver: 0x01
op: C uba: 0x0080099b.0e3f.02
KDO Op code: CFA row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01406ff3 hdba: 0x01406feb
itli: 1 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) flag: 0x02
lock: 1 nrid: 0x03000000.ffffc258
11.3先删除bdba: 0x01406ff5的数据,11.8把dba: 0x01406ff3的nrid指向0x03000000.ffffc258。0x03000000.ffffc258应该是个不存在的dba。
其实对于解析sql语句来说,这部分是不需要解析出来的。只需解析出drop column的语句。其他oracle会自己完成。
阅读(1373) | 评论(0) | 转发(0) |