關於檔案頭保留塊資訊的儲存探索

紅葉DBA發表於2011-04-27
今天又探索了一回檔案頭保留塊的儲存結構了,
又進一步的瞭解了檔案頭保留塊的儲存及作用。

本次實驗我分了兩種情況:
1、本地管理中,如果是 uniform. size分配,那麼檔案頭保留塊如何記錄?
2、本地管理中,如果是 system allocation,那麼檔案頭保留塊如何記錄?
ps:本人為了命令回顯 sqlplus = rlwrap sqlplus /nolog


下面附上實驗過程:

實驗一:uniform. size分配,那麼檔案頭保留塊如何記錄?

1、建立一個uniform. size 128k 的表空間 TEST。

SYS:33@hongye > create tablespace test datafile size 5m segment space management auto uniform. size 128k;

Tablespace created.

SYS:33@hongye > select tablespace_name,allocation_type from dba_tablespaces where tablespace_name='TEST';

TABLESPACE_NAME                ALLOCATIO
------------------------------ ---------
TEST                           UNIFORM

SYS:33@hongye > col file_name for a60
SYS:33@hongye > select file_id,file_name,tablespace_name from dba_data_files where tablespace_name='TEST';

   FILE_ID FILE_NAME                                                    TABLESPACE_NAME
---------- ------------------------------------------------------------ ------------------------------
         6 /oracle/oradata/HONGYE/datafile/o1_mf_test_6vhxxnbw_.dbf     TEST

2、匯出相關檔案的保留塊,匯出檔案記為 file1。

HONGYE:42@hongye > alter system dump datafile 6 block min 2 block max 8;

System altered.

HONGYE:42@hongye > @get_tracefile

trace file name
----------------------------------------------------------------------------------------------------
/oracle/admin/hongye/udump\hongye_ora_2134.trc

3、退出並重新登入,以便於獲得新的 dump 檔案,
否則,所有的 dump 檔案都寫到一個檔案中,不利於檢視。


SYS:42@hongye > exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

[oracle@DBA6U0 udump]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Apr 27 19:32:42 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

IDLE > conn hongye/hongye
Connected.

4、在表空間中建立一個物件 TEST,並插入資料,使得該物件佔用一定數量的 extents。

HONGYE:42@hongye > create table test tablespace test as select * from dba_objects where rownum<1001;

Table created.

HONGYE:42@hongye > insert into test select * from test;

1000 rows created.

。。。。。。

HONGYE:42@hongye > insert into test select * from test;

16000 rows created.

HONGYE:42@hongye > commit;

Commit complete.

HONGYE:42@hongye > analyze table test compute statistics;

Table analyzed.

5、再次匯出相關資料檔案的檔案頭保留塊,匯出檔案記為 file2。

HONGYE:42@hongye > alter system dump datafile 6 block min 2 block max 8;

System altered.

HONGYE:42@hongye > @get_tracefile

trace file name
----------------------------------------------------------------------------------------------------
/oracle/admin/hongye/udump\hongye_ora_2264.trc

6、查詢 TEST 表佔用的資料塊情況。

HONGYE:42@hongye > select table_name,tablespace_name,blocks,empty_blocks from user_tables;

TABLE_NAME                     TABLESPACE_NAME                    BLOCKS EMPTY_BLOCKS
------------------------------ ------------------------------ ---------- ------------
DEPT                           HONGYE                                 26            0
EMP                            HONGYE                                 26            0
T                              HONGYE                                 26            0
TEST                           TEST                                  610           14

HONGYE:42@hongye > select segment_name,file_id,block_id,blocks from dba_extents where segment_name='TEST';

SEGMENT_NAME                                                                         FILE_ID   BLOCK_ID     BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
TEST                                                                                       6          9         16
TEST                                                                                       6         25         16
TEST                                                                                       6         41         16
TEST                                                                                       6         57         16
TEST                                                                                       6         73         16
TEST                                                                                       6         89         16
TEST                                                                                       6        105         16
TEST                                                                                       6        121         16
TEST                                                                                       6        137         16
TEST                                                                                       6        153         16
TEST                                                                                       6        169         16
TEST                                                                                       6        185         16
TEST                                                                                       6        201         16
TEST                                                                                       6        217         16
TEST                                                                                       6        233         16
TEST                                                                                       6        249         16
TEST                                                                                       6        265         16
TEST                                                                                       6        281         16
TEST                                                                                       6        297         16
TEST                                                                                       6        313         16
TEST                                                                                       6        329         16
TEST                                                                                       6        345         16
TEST                                                                                       6        361         16
TEST                                                                                       6        377         16
TEST                                                                                       6        393         16
TEST                                                                                       6        409         16
TEST                                                                                       6        425         16
TEST                                                                                       6        441         16
TEST                                                                                       6        457         16
TEST                                                                                       6        473         16
TEST                                                                                       6        489         16
TEST                                                                                       6        505         16
TEST                                                                                       6        521         16
TEST                                                                                       6        537         16
TEST                                                                                       6        553         16
TEST                                                                                       6        569         16
TEST                                                                                       6        585         16
TEST                                                                                       6        601         16
TEST                                                                                       6        617         16

39 rows selected.

小結:

先貼上 file1 和 file2 兩個檔案相關內容:

file1:           --Before for uniform. size

File Space Header Block:
Header Control:
RelFno: 6, Unit: 16, Size: 640, Flag: 1
AutoExtend: NO, Increment: 0, MaxSize: 0
Initial Area: 7, Tail: 632, First: 0, Free: 39
Deallocation scn: 0.0
......(略去一些不相干的內容)
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 9, Flag: 0, First: 0, Free: 63488
0000000000000000 0000000000000000 0000000000000000 0000000000000000
......

file2:--Alter for uniform. size

File Space Header Block:
Header Control:
RelFno: 6, Unit: 16, Size: 640, Flag: 1
AutoExtend: NO, Increment: 0, MaxSize: 0
Initial Area: 7, Tail: 632, First: 39, Free: 0
Deallocation scn: 928878.0
......(略去一些不相干的內容)
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 9, Flag: 0, First: 39, Free: 63449
......

注意到:
RelFno: 6       表示dump出來的檔案的相對檔案號。
Unit:16,     表示在該資料檔案(其實應該是該表空間中所有的資料檔案)中的分配單元為16,
也就是說,每個點陣圖標誌位所記錄的內容都對應一個擁有16個Block的extent。
First: 39       佔用了39個 Unit,也就是39個extent(這一點可以從第 6 步中看出來)
Free: 0         還可以分配的 Unit 數目
(這也證實了為什麼在插入中會出現 ORA-01653: unable to extend table HONGYE.TEST by 16 in tablespace TEST)
Free: 63449     這是表示這個塊中可用的標誌位的剩餘情況,並不一定會完全用的完,這取決於你建立時設定的大小。
BeginBlock: 9   表示此處記載的是從9號Block開始的extent分配情況。


重點比較:
File1:0000000000000000
File2:FFFFFFFF7F000000
發現,兩者的主要區別是前幾位的標誌位改變了,現在將16進位制的標誌位轉化為2進位制:
FFFFFFFF7F = 1111 1111 1111 1111 1111 1111 1111 1111 0111 1111
考慮到Linux中的Endian Format,則進一步轉化為:
FFFFFFFF7F = 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110
這下,清楚了,有39個1,剛好對應39個已經分配了的 extent。
而且,這39個 extent 是連續的,從dump檔案和第6步的查詢中,都可以反映出這一點。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24465008/viewspace-693920/,如需轉載,請註明出處,否則將追究法律責任。

相關文章