创建表空间用于测试:
SQL> create tablespace bitmap_tbs
2 datafile 'e:oracleproduct10.2.0oradatabitmap_tbs.dbf'
3 size 10m
4 uniform size 128k
5 /
表空间已创建。
查询数据文件的文件号:
FILE_NAME FILE_ID
---------- -------------
E:ORACLEPRODUCT10.2.0ORADATABITMAP_TBS.DBF 5
SQL> select file_name,file_id from dba_data_files;
导出第二个块的内容;
SQL> alter system dump datafile 5 block 2;
系统已更改。
File Space Header Block:
Header Control:
RelFno: 5, Unit: 16, Size: 1280, Flag: 1
AutoExtend: NO, Increment: 0, MaxSize: 0
Initial Area: 7, Tail: 1272, First: 0, Free: 79
Deallocation scn: 0.0
Header Opcode:
Save: No Pending Op
End dump data blocks tsn: 10 file#: 5 minblk 2 maxblk 2
解释:RelFno: 5 文件号
Unit: 16 每个extent16个数据块
Size: 1280 此文件一共1280个数据块
Flag: 1 待考查
再来导出第三个块:
SQL> alter system dump datafile 5 block 3;
系统已更改。
*** 2006-04-11 11:20:13.392
Start dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
……
File Space Bitmap Block:
BitMap Control:
RelFno: 5, BeginBlock: 9, Flag: 0, First: 0, Free: 63488
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
……
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
End dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
解释:
RelFno: 5,
BeginBlock: 9 第一个bit对应的数据块号
Flag: 0 0表示permanent文件,1表示temp文件
First: 0 在哪里开始寻找free space
Free: 63488
在此表空间创建一个表:
SQL> create table test
2 tablespace bitmap_tbs
3 as
4 select * from dba_objects
5 /
表已创建。
再导出第三个数据块:
SQL> alter system dump datafile 5 block 3;
系统已更改。
*** 2006-04-11 11:45:44.254
Start dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
……
File Space Bitmap Block:
BitMap Control:
RelFno: 5, BeginBlock: 9, Flag: 0, First: 10, Free: 63478
FF03000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
……
0000000000000000 0000000000000000 0000000000000000 0000000000000000
End dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
查看一下此表被分配的extent信息:
SQL> select file_id,extent_id,blocks
2 from dba_extents
3 where segment_name='TEST'
4 /
FILE_ID EXTENT_ID BLOCKS
------------ --------------- ------------
5 0 16
5 1 16
5 2 16
5 3 16
5 4 16
5 5 16
5 6 16
5 7 16
5 8 16
5 9 16
已选择10行。
我们看导出文件中的FF03与这里的查询结果的对应关系:
FF经过swap后,还是FF,即1111 1111
03经过swap后,为110000,
组合到一起为1111 1111 11 0000,很明显这是10个1,
表示前10个extent是被占用的,这也与导出文件中的first为10对应。
我们再创建一个表,然后导出第三个数据块:
SQL> create table test2
2 tablespace bitmap_tbs
3 as
4 select * from dba_objects
5 where rownum<5001
6 /
表已创建。
SQL> alter system dump datafile 5 block 3;
系统已更改。
*** 2006-04-11 12:00:04.100
Start dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
……
BitMap Control:
RelFno: 5, BeginBlock: 9, Flag: 0, First: 15, Free: 63473
FF7F000000000000 0000000000000000 0000000000000000 0000000000000000
……
0000000000000000 0000000000000000 0000000000000000 0000000000000000
End dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
查询一下test2被分配到的extent情况:
SQL> select file_id,extent_id,blocks
2 from dba_extents
3 where segment_name='TEST2' and owner='SYS'
4 /
FILE_ID EXTENT_ID BLOCKS
------------ --------------- ------------
5 0 16
5 1 16
5 2 16
5 3 16
5 4 16
可以看到test2表被分配了5个extent,我们再看刚才所得到的导出文件中的FF7F:
FF经过swap后,是1111 1111,
7F的二进制为111 1111,swap后为1111 1110,
组合到一起,即1111 1111 1111 111,表示前面15个extent被占用。
我们再删除第一个表,
*** 2006-04-11 12:06:15.885
Start dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
……
File Space Bitmap Block:
BitMap Control:
RelFno: 5, BeginBlock: 9, Flag: 0, First: 0, Free: 63483
007C000000000000 0000000000000000 0000000000000000 0000000000000000
……
0000000000000000 0000000000000000 0000000000000000 0000000000000000
End dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
我们考查007C:00经过swap后为0000 0000,
7c二进制为111 11经过swap后为11111,
表示前8个区free,从第9个到第14个被占用。
我们再删除test2表,这时bitmap表现为全0:
*** 2006-04-11 12:10:59.793
Start dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
……
File Space Bitmap Block:
BitMap Control:
RelFno: 5, BeginBlock: 9, Flag: 0, First: 0, Free: 63488
0000000000000000 0000000000000000 0000000000000000 0000000000000000
……
0000000000000000 0000000000000000 0000000000000000 0000000000000000
End dump data blocks tsn: 10 file#: 5 minblk 3 maxblk 3
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/37724/viewspace-152530/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/37724/viewspace-152530/
本文详细介绍了在Oracle数据库中如何使用SQL命令创建表空间、查询数据文件信息、导出指定块的内容,并通过实例展示了位图在跟踪表空间extent分配状态的应用。
4043

被折叠的 条评论
为什么被折叠?



