然后插入一行记录,只有一个字段的:
SQL> insert into test(x) values (1); 1 row created. SQL> commit; Commit complete.
|
查找这行记录所在的block,并dump出来:
SQL> select dbms_rowid.rowid_block_number(rowid) from test; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) 34 SQL> alter system dump datafile 23 block 34; System altered.
|
在udump目录下查看trace文件的内容如下:
Start dump data blocks tsn: 34 file#: 23 minblk 34 maxblk 34 buffer tsn: 34 rdba: 0x05c00022 (23/34) scn: 0x0000.013943f3 seq: 0x01 flg: 0x02 tail: 0x43f30601 frmt: 0x02 chkval: 0x0000 type: 0x06=trans data Block header dump: 0x05c00022 Object id on Block? Y seg/obj: 0x3ccd csc: 0x00.13943ef itc: 2 flg: O typ: 1 - DATA fsl: 0 fnx: 0x0 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x000a.02e.00000ad7 0x00800036.03de.18 --U- 1 fsc 0x0000.013943f3 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 data_block_dump,data header at 0xadb505c tsiz: 0x1fa0 hsiz: 0x14 pbl: 0x0adb505c bdba: 0x05c00022 76543210 flag=-------- ntab=1 nrow=1 frre=-1 fsbo=0x14 fseo=0x1f9a avsp=0x1f83 tosp=0x1f83 0xe:pti[0] nrow=1 offs=0 0x12:pri[0] offs=0x1f9a block_row_dump: tab 0, row 0, @0x1f9a tl: 6 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 2] c1 02 end_of_block_dump End dump data blocks tsn: 34 file#: 23 minblk 34 maxblk 34
|
对其中的一些信息做一些解释:
◆Fb:H是指行记录的头,L是指行记录的最后一列,F是指行记录的第一列。
◆Cc:列的数量。
◆Nrid:对于行链接或者行迁移来说的下一个row id的值。
由上面的dump信息我们可以看出来当前表test是没有行链接或者行迁移的。
然后更新test表,并重新dump出来:
SQL> update test set a='test',b='test',c='test',d='test',e='test' where x=1; 1 row updated. SQL> commit; Commit complete.
|
此时应该有行迁移和行链接产生了。
SQL> alter system dump datafile 23 block 34; System altered.
|
在udump目录下查看trace文件的内容如下:
Start dump data blocks tsn: 34 file#: 23 minblk 34 maxblk 34 buffer tsn: 34 rdba: 0x05c00022 (23/34) scn: 0x0000.0139442b seq: 0x01 flg: 0x02 tail: 0x442b0601 frmt: 0x02 chkval: 0x0000 type: 0x06=trans data Block header dump: 0x05c00022 Object id on Block? Y seg/obj: 0x3ccd csc: 0x00.1394429 itc: 2 flg: - typ: 1 - DATA fsl: 0 fnx: 0x0 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x000a.02e.00000ad7 0x00800036.03de.18 C--- 0 scn 0x0000.013943f3 0x02 0x0004.002.00000ae0 0x0080003b.0441.11 --U- 1 fsc 0x0000.0139442b data_block_dump,data header at 0xadb505c =============== tsiz: 0x1fa0 hsiz: 0x14 pbl: 0x0adb505c bdba: 0x05c00022 76543210 flag= -------- ntab=1 nrow=1 frre=-1 fsbo=0x14 fseo=0x178a avsp=0x177c tosp=0x177c 0xe:pti[0] nrow=1 offs=0 0x12:pri[0] offs=0x178a block_row_dump: tab 0, row 0, @0x178a tl: 2064 fb: --H-F--N lb: 0x2 cc: 3 nrid: 0x05c00023.0 col 0: [ 2] c1 02 col 1: [2000] 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ………… col 2: [48] 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 end_of_block_dump End dump data blocks tsn: 34 file#: 23 minblk 34 maxblk 34
|
我们不难看出,nrid出现了值,指向了下一个row id,证明刚刚的update操作使这行记录产生了行链接或者行?