首页 > 数据库 > Oracle > CLUSTER内部结构的总结(3)
将这个块dump出来,这部分是数据块的头:
Start dump data blocks tsn: 18 file#: 5 minblk 12 maxblk 12 buffer tsn: 18 rdba: 0x0140000c (5/12) scn: 0x0000.00318001 seq: 0x01 flg: 0x02 tail: 0x80010601 frmt: 0x02 chkval: 0x0000 type: 0x06=trans data Hex dump of block: st=0, typ_found=1 |
这部分是ITL,这里需要注意的是在9i之前数据的ITL最小是1,在Oracle 10g之后默认的最小是2。但是在9i时候custer的ITL的最小是2。
Block header dump: 0x0140000c Object id on Block? Y seg/obj: 0xcbcb csc: 0x00.318000 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x1400009 ver: 0x01 opc: 0 inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0006.020.00000479 0x00800017.012b.09 C--- 0 scn 0x0000.00318000 0x02 0x0002.004.00000479 0x0080041b.02cf.14 --U- 8 fsc 0x0000.00318001 |
开始看正题了:
data_block_dump,data header at 0x8222264 =============== tsiz: 0x1f98 hsiz: 0x32 pbl: 0x08222264 bdba: 0x0140000c 76543210 flag=-------K ntab=3 nrow=12 frre=-1 fsbo=0x32 fseo=0x1ef4 avsp=0x1ec2 tosp=0x1ec2 |
这里面与其他的不一样的是flag的标志。
flag=----N-K-F-AN:
No inserts (pctfree hit, clusters only)
K: Flushable Key(s)
F: Do not put block on free list
A: Array style hash cluster only
还有ntab,这里表示这个数据块中存放的是三个表的数据,其实在这个表存放的是一个cluster和两个表的数据。
nrow标识的是这三个表的总共的行数。
0xe:pti[0] nrow=4 offs=0 0x12:pti[1] nrow=4 offs=4 0x16:pti[2] nrow=4 offs=8 这三个需要解释一个这个是和普通的堆表存放不一样的地方。这个一般存放在数据部分的0x0e这个位置开始,按照offs(两个字节),rows(两个字节)的顺序排列,以上的排列应该是这样的: -- -- -- -- Offs rows 00 00 04 00 04 00 04 00 08 00 04 00 这就是告诉Oracle,第一个表有四行,从00开始偏移,其实这个表就是cluster本身。 然后是第二个表也是有四行,从04开始偏移,。 第三个表四行,从08开始偏移。 咱们再做一个试验,检验一下这个结论的正确像: SQL> insert into t1 values ('1','t1aaa');――向t1表插入一个数值。 1 row inserted SQL> commit; Commit complete SQL> alter system checkpoint; System altered SQL> alter system dump datafile 5 block 12; System altered SQL> 可以在dump上看到: 0xe:pti[0] nrow=4 offs=0 0x12:pti[1] nrow=5 offs=4 ――t1 0x16:pti[2] nrow=4 offs=9 这时候可以看到我们的猜测是正确的。 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/222350/viewspace-917323/ ,如需转载,请注明出处,否则将追究法律责任。