set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 22963 objn: 22963 tsn: 9 afn: 14 hint: f
hash: [0x2b3fd83c,0x2b3fd83c] lru: [0x21fe8ec0,0x227f1d68]
ckptq: [NULL] fileq: [NULL] objq: [0x24440ce4,0x21fe8ed8] objaq: [0x21fe8ee0,0x21ff6f2c]
st: XCURRENT md: NULL fpin: 'ktspfwh6: ktspffbmb' tch: 1
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
Block dump from disk:
buffer tsn: 9 rdba: 0x03800080 (14/128)
scn: 0x0000.0077dfe3 seq: 0x02 flg: 0x04 tail: 0xdfe32002
frmt: 0x02 chkval: 0x9faf type: 0x20=FIRST LEVEL BITMAP BLOCK ---可以看到,第128个块是新创建表的L1块了,后面还有L2,段头-L3,不是本篇主题,我没贴出来了。
Hex dump of block: st=0, typ_found=1
实验第二步:位图块中对于区的使用情况的记录
1.正常情况下的分析:
BH (0x22fe4424) file#: 14 rdba: 0x03800003 (14/3) class: 12 ba: 0x22c56000set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: -1 objn: 1 tsn: 9 afn: 14 hint: f
hash: [0x2a7fb618,0x2a7fb618] lru: [0x217f75ec,0x20bfca24]
ckptq: [NULL] fileq: [NULL] objq: [0x217f7604,0x24444154] objaq: [0x217f760c,0x2444414c]
st: XCURRENT md: NULL fpin: 'ktfbwh36: ktfbbsearch' tch: 2
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
Block dump from disk:
buffer tsn: 9 rdba: 0x03800003 (14/3)
scn: 0x0000.0077dfdb seq: 0x01 flg: 0x04 tail: 0xdfdb1e01
frmt: 0x02 chkval: 0x4c9b type: 0x1e=KTFB Bitmapped File Space Bitmap --第3个块,开始使用位图记录此数据文件中区的使用情况
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB6C22600 to 0xB6C24600
B6C22600 0000A21E 03800003 0077DFDB 04010000 [..........w.....]
B6C22610 00004C9B 0000000E 00000080 00000000 [.L..............]
B6C22620 00000001 0000F7FF 00000000 00000000 [................]
B6C22630 00000000 00000000 00000001 00000000 [................]
B6C22640 00000000 00000000 00000000 00000000 [................]
Repeat 506 times
B6C245F0 00000000 00000000 00000000 DFDB1E01 [................]
File Space Bitmap Block:
BitMap Control:
RelFno: 14, BeginBlock: 128, Flag: 0, First: 1, Free: 63487 --因为是新建的表空间,并在此表空间新建表,暂时只分配了一个区。
0100000000000000 0000000000000000 0000000000000000 0000000000000000
这里的01就是表示的区的块数,十六进制01表示二进制是一个1,二进制的一个1就是表示分配了一个区了,因为新表插入一行数据,所以只分配了一个区。。可以使用手动分配区命令后再DUMP ,alter table test2 allocate extent ;
如果是 First: 3,表示当前已经分配了3个区,那么对应的十六进制是0700,二进制为111。。见图:
2.在数据文件中有两个表,删除靠前的一个---位图中变为 First: 1,
BYS@ bys3>create table test4 (aa int) tablespace test2;Table created.
BYS@ bys3>insert into test4 select object_id from dba_objects;
17556 rows created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>alter system checkpoint;
System altered.
BYS@ bys3>alter system dump datafile 7 block 3;
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%';
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_22652.trc
此时DUMP文件中3号块的位图记录:
File Space Bitmap Block:
BitMap Control:
RelFno: 7, BeginBlock: 128, Flag: 0 , First: 1204, Free: 62284
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFF FFFFFF