一、概念介绍
Oracle Level 2 Bitmap Block(简称L2)中存储Level 1 Bitmap Block(简称L1)的地址,L2内部结构由CacheHeader、Header Control及L1 BMB array三层结构组成,Oracle数据块类型代码为“type: 0x21=SECOND LEVEL BITMAP BLOCK”,和L3相同bbed工具同样不支持查询L2的物理结构,本节主要使用C语言解析L2物理结构。

Header Control内容:
L2 的HeaderControl结构包含以下内容:
对应父节点L3 BMB地址(简称L3);
对应L1的地址;
空闲空间L1数量;
下一个L2地址;
事务操作类型;
锁操作描述;
L1 BMB array内容:
L1地址;
每个块最大空闲状态;
关联实例。
二、dump块结构解析
alter session set tracefile_identifier='orastar_bmb2';
oradebug setmypid
alter system dump datafile 5 block 7705;
oradebug close_trace
oradebug tracefile_name
Cache Header:
type: 0x21 SECOND LEVEL BITMAP BLOCK表示该块为L2数据块,

Header Control:
pdba: 表示父节点L3地址;
number: 表示L1数量;
Objd: 表示对象object_id;
nfree: Free标志为非1的L1数量;
ffree: Free标志为1的L1数量。

L1 BMB array:
L1地址
数据块的最大空闲状态: - 1: unformatted.- 2: formatted &freespace between 0 and 25%- 3: formatted &freespace between 25% and 50%- 4: formatted &freespace between 50% and 75%- 5: formatted &freespace between 75% and 100%- 6: formatted &block is full
关联实例:单实例为1

三、二进制结构
Cache Header:

Header Control:

L1 BMB array:

四、数据块解析
由于bbed不支持L2数据块的物理结构解析,报错信息如下所示,
BBED> set dba 5,7705
DBA 0x01401e19(20979225 5,7705)
BBED> map v
File:/oradata/epmsn/hsql01.dbf (5)
Block: 7705 Dba:0x01401e19
------------------------------------------------------------
BBED-00400: invalid blocktype (33)
使用C语言结构体解析该数据块结构,解析后的物理结构如下所示,

五、说明
1、以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正;
2、文章涉及内容,请勿在生产环境模拟。

君子谋道不谋食。君子忧道不忧贫。 --《论语》




