下面是一个使用手工段管理的数据块的信息:
buffer tsn: 10 rdba: 0x02804e46 (10/20038)
scn: 0x0000.002225d6 seq: 0x01 flg: 0x02 tail: 0x25d60601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data --数据块的类型是0X06
Block header dump: 0x02804e46
Object id on Block? Y
seg/obj: 0x918b csc: 0x00.222581 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01 -- FREE LIST的下一个块指针FNX
Itl Xid Uba Flag Lck Scn/Fsc --事务槽信息,本例子中有2个事务槽,在实际运行的时候如果块中有空闲空间,可以动态扩展
0x01 0x0009.01b.000007c2 0x00800092.005e.76 --U- 86 fsc 0x0000.002225d6
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
data_block_dump,data header at 0x6d1105c
===============
tsiz: 0x1fa0
hsiz: 0xbe
pbl: 0x06d1105c
bdba: 0x02804e46 --块地址
76543210
flag=--------
ntab=1
nrow=86 --本块包含的记录行数(包含删除的记录)
frre=-1
fsbo=0xbe
fseo=0x1a97
avsp=0x19d9
tosp=0x19d9
0xe:pti[0] nrow=86 offs=0
0x12:pri[0] offs=0x1f91 --每行的物理地址(偏移量)
0x14:pri[1] offs=0x1f82
0x16:pri[2] offs=0x1f73
0x18:pri[3] offs=0x1f64
0x1a:pri[4] offs=0x1f55
0x1c:pri[5] offs=0x1f46
0x1e:pri[6] offs=0x1f37
0x20:pri[7] offs=0x1f28
0x22:pri[8] offs=0x1f19
0x24:pri[9] offs=0x1f0a
……
……
block_row_dump: --以下是每行的DUMP信息
tab 0, row 0, @0x1f91 –第0行,偏移1F91,fb是标志位,如果带有D标志(HDFL)表示已经删除
tl: 15 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 0a 10 --第一个字段
col 1: [ 7] 31 31 32 39 31 31 30 --第二个字段
tab 0, row 1, @0x1f82
tl: 15 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 0a 11
col 1: [ 7] 31 31 33 30 33 34 34
tab 0, row 2, @0x1f73
tl: 15 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 0a 12
col 1: [ 7] 31 31 33 31 35 37 38
tab 0, row 3, @0x1f64
tl: 15 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 0a 13
col 1: [ 7] 31 31 33 32 38 31 32
tab 0, row 4, @0x1f55
tl: 15 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 0a 14
col 1: [ 7] 31 31 33 34 30 34 36
这是最简单的一个数据块的结构,使用自动段空间管理的块结构和上面的类似,只是缺少了FREELISTS的相关信息。如果块中的数据重组后(删除、修改、产生行迁移等现象),其结构要复杂的多,这里就不做详细的分析了