本地管理表空間的bitmap結構測試

lawzjf發表於2006-04-11

建立表空間用於測試:

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章