bitmap block以及segment header块学习

http://warehouse.itpub.net/post/777/431280
http://www.itpub.net/thread-142629-1-1.html
http://dbsnake.com/2009/09/lmt-datafile-structure.html
http://blogs.oracle.com/datawarehousing/entry/parallel_load_uniform_or_autoallocate

测试如下:

SQL> create table tt tablespace assm as select * from dba_objects;

表已创建。

SQL> select EXTENT_ID , FILE_ID , BLOCK_ID , BLOCKS from dba_extents where segme
nt_name='TT';

EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 7 9 8
1 7 17 8
2 7 25 8
3 7 33 8
4 7 41 8
5 7 49 8
6 7 57 8
7 7 65 8
8 7 73 8
9 7 81 8
10 7 89 8
11 7 97 8
12 7 105 8
13 7 113 8
14 7 121 8
15 7 129 8
16 7 137 128

已选择17行。

SQL> select header_file,header_block,blocks,extents from dba_segments where segm
ent_name='TT';

HEADER_FILE HEADER_BLOCK BLOCKS EXTENTS
----------- ------------ ---------- ----------
7 11 256 17

SQL>

HEADER_BLOCK 显示的是11(segment header),而extent_id=0也就是说第一个extent是从第9个block开

始的,那么9,10block到底做什么用了,dump下看看:

SQL> alter system dump datafile 7 block min 9 block max 11;

系统已更改。

dump主要内容摘录如下:

--===================================

Start dump data blocks tsn: 15 file#: 7 minblk 9 maxblk 11
buffer tsn: 15 rdba: 0x01c00009 (7/9)
scn: 0x0000.001607e3 seq: 0x03 flg: 0x04 tail: 0x07e32003
frmt: 0x02 chkval: 0xa169 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07082200 to 0x07084200
...........
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 2 parent dba: 0x01c0000a poffset: 0
unformatted: 0 total: 16 first useful block: 3
owning instance : 1
instance ownership changed at
Last successful Search
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0

Extent Map Block Offset: 4294967295
First free datablock : 16
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 10056
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01c00009 Length: 8 Offset: 0
0x01c00011 Length: 8 Offset: 8

0:Metadata 1:Metadata 2:Metadata 3:FULL
4:FULL 5:FULL 6:FULL 7:FULL
8:FULL 9:FULL 10:FULL 11:FULL
12:FULL 13:FULL 14:FULL 15:FULL
--------------------------------------------------------
buffer tsn: 15 rdba: 0x01c0000a (7/10)
scn: 0x0000.001607e3 seq: 0x09 flg: 0x04 tail: 0x07e32109
frmt: 0x02 chkval: 0xa07c type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07082200 to 0x07084200
.................
Dump of Second Level Bitmap Block
number: 10 nfree: 2 ffree: 8 pdba: 0x01c0000b
Inc #: 0 Objd: 10056
opcode:0
xid:
L1 Ranges :
--------------------------------------------------------
0x01c00009 Free: 1 Inst: 1
0x01c00019 Free: 1 Inst: 1
0x01c00029 Free: 1 Inst: 1
0x01c00039 Free: 1 Inst: 1
0x01c00049 Free: 1 Inst: 1
0x01c00059 Free: 1 Inst: 1
0x01c00069 Free: 1 Inst: 1
0x01c00079 Free: 1 Inst: 1
0x01c00089 Free: 5 Inst: 1
0x01c0008a Free: 5 Inst: 1

--------------------------------------------------------
buffer tsn: 15 rdba: 0x01c0000b (7/11)
scn: 0x0000.001607e5 seq: 0x01 flg: 0x04 tail: 0x07e52301
frmt: 0x02 chkval: 0x8d53 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07082200 to 0x07084200
.............
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 17 #blocks: 256
last map 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x01c0008c ext#: 16 blk#: 3 ext size: 128
#blocks in seg. hdr's freelists: 0
#blocks below: 131
mapblk 0x00000000 offset: 16
Unlocked
--------------------------------------------------------
Low HighWater Mark :
Highwater:: 0x01c0008c ext#: 16 blk#: 3 ext size: 128
#blocks in seg. hdr's freelists: 0
#blocks below: 131
mapblk 0x00000000 offset: 16
Level 1 BMB for High HWM block: 0x01c00089
Level 1 BMB for Low HWM block: 0x01c00089
--------------------------------------------------------
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x01c0000a
Last Level 1 BMB: 0x01c0008a
Last Level II BMB: 0x01c0000a
Last Level III BMB: 0x00000000
Map Header:: next 0x00000000 #extents: 17 obj#: 10056 flag: 0x10000000
Inc # 0
Extent Map
-----------------------------------------------------------------
0x01c00009 length: 8
0x01c00011 length: 8
0x01c00019 length: 8
0x01c00021 length: 8
0x01c00029 length: 8
0x01c00031 length: 8
0x01c00039 length: 8
0x01c00041 length: 8
0x01c00049 length: 8
0x01c00051 length: 8
0x01c00059 length: 8
0x01c00061 length: 8
0x01c00069 length: 8
0x01c00071 length: 8
0x01c00079 length: 8
0x01c00081 length: 8
0x01c00089 length: 128

Auxillary Map
--------------------------------------------------------
Extent 0 : L1 dba: 0x01c00009 Data dba: 0x01c0000c
Extent 1 : L1 dba: 0x01c00009 Data dba: 0x01c00011
Extent 2 : L1 dba: 0x01c00019 Data dba: 0x01c0001a
Extent 3 : L1 dba: 0x01c00019 Data dba: 0x01c00021
Extent 4 : L1 dba: 0x01c00029 Data dba: 0x01c0002a
Extent 5 : L1 dba: 0x01c00029 Data dba: 0x01c00031
Extent 6 : L1 dba: 0x01c00039 Data dba: 0x01c0003a
Extent 7 : L1 dba: 0x01c00039 Data dba: 0x01c00041
Extent 8 : L1 dba: 0x01c00049 Data dba: 0x01c0004a
Extent 9 : L1 dba: 0x01c00049 Data dba: 0x01c00051
Extent 10 : L1 dba: 0x01c00059 Data dba: 0x01c0005a
Extent 11 : L1 dba: 0x01c00059 Data dba: 0x01c00061
Extent 12 : L1 dba: 0x01c00069 Data dba: 0x01c0006a
Extent 13 : L1 dba: 0x01c00069 Data dba: 0x01c00071
Extent 14 : L1 dba: 0x01c00079 Data dba: 0x01c0007a
Extent 15 : L1 dba: 0x01c00079 Data dba: 0x01c00081
Extent 16 : L1 dba: 0x01c00089 Data dba: 0x01c0008b
--------------------------------------------------------

Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x01c0000a

End dump data blocks tsn: 15 file#: 7 minblk 9 maxblk 11

--===================================

其中在第9个block的dump信息中我们发现type: 0x20=FIRST LEVEL BITMAP BLOCK,说明这个block是第一

级bitmap block,oracle用第一级bitmap block来管理data block的使用情况:

--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01c00009 Length: 8 Offset: 0
0x01c00011 Length: 8 Offset: 8

0:Metadata 1:Metadata 2:Metadata 3:FULL
4:FULL 5:FULL 6:FULL 7:FULL
8:FULL 9:FULL 10:FULL 11:FULL
12:FULL 13:FULL 14:FULL 15:FULL
--------------------------------------------------------
从上面内容(来自block 9的dump)发现9#block总共管理了16个block,也就是2个extent。由于extent

是由连续的block组成的,因此只需要记录每个extent的起始block地址(0x01c00009)和extent的数量即可

两个16进制的dba转化为10进制的分别是:

SQL> select dbms_utility.data_block_address_block(to_number('01c00009','xxxxxxxx
')) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('01C00009','XXXXXXXX'))
-----------------------------------------------------------------------
9
SQL> select dbms_utility.data_block_address_block(to_number('01c000011','xxxxxxx
xx')) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('01C000011','XXXXXXXXX'))
-------------------------------------------------------------------------
17

SQL>

而block 9,17不正是我们上面查询dba_extents是显示的extent_id = 0 , 1两个extent

另外9# block dump信息中的:

0:Metadata 1:Metadata 2:Metadata

表示9#~11#block显示的是Metadata(元数据:数据仓库中非常重要的概念,管理数据的数据,oracle中

的数据字典据都可以理解成元数据),其中0表示是9#block,1 表示10#block,2 表示11#block

(segment header),其他显示的都是full,表示这些block上都已经没有可用的空闲空间。同时也发现

我们真真使用数据是从12#block开始的。

9#block dump内容里还有一个重要的信息就是parent dba: 0x01c0000a表示9#block的parent block

的地址,而这个block的地址正好是10#block的地址:rdba: 0x01c0000a。

至此9#block暂时分析完毕。

--==================================

再来10#block:

10#block的类型是:type: 0x21=SECOND LEVEL BITMAP BLOCK

说明该block是二级bitmap block,他是用来管理一级bitmap block的。

10#block的主要dump信息:

L1 Ranges :
--------------------------------------------------------
0x01c00009 Free: 1 Inst: 1
0x01c00019 Free: 1 Inst: 1
0x01c00029 Free: 1 Inst: 1
0x01c00039 Free: 1 Inst: 1
0x01c00049 Free: 1 Inst: 1
0x01c00059 Free: 1 Inst: 1
0x01c00069 Free: 1 Inst: 1
0x01c00079 Free: 1 Inst: 1
0x01c00089 Free: 5 Inst: 1
0x01c0008a Free: 5 Inst: 1

--------------------------------------------------------

其中L1 Ranges 中的哪些dba转为10进制如下:
9
25
41
57
73
89
105
121
137
138

而这些值都是一级bitmap block的block_id,而这些值不正是dba_extents中显示的,同时也看到每一个一

级bitmap block管理了16个data block。不过奇怪的是为什么138#block怎么也成了一级bitmap block了

?暂时解释不清。

SQL> select block_id from dba_extents where segment_name='TT' AND mod(extent_id,
2)=0;

BLOCK_ID
----------
9
25
41
57
73
89
105
121
137

已选择9行。

SQL>

再来看看10#block的 pdba: 0x01c0000b,这个地址正是11#block的dba:rdba: 0x01c0000b 。

接下来简单看看11#block的类型是:

type: 0x23=PAGETABLE SEGMENT HEADER

也就是我们熟悉的segment header block,这里它也同时是一个特殊的三级bitmap block

同时最下面一条非常有用的信息是:

Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x01c0000a

记录了二级btimap block的地址,因为segment小,只有1个二级bitmap block,大家也可以创建一个大一

点的表,主要需要保证要有足够多的block才可能看到第二个二级block出现,要看到出现一个三级bitmap

block可能非常的难。

感兴趣的话大家也可以参考eygle,piner两位版主的力作:

http://www.eygle.com/archives/2007/07/oracle_assm_level3_bmb.html
http://www.itpub.net/thread-734505-1-3.html


阅读了上面两个帖子,学到了不少东西。尤其是eygle,弄出了一个三级位图快。佩服啊佩服。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22295535/viewspace-710229/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22295535/viewspace-710229/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值