關於檔案頭保留塊資訊的儲存探索
今天又探索了一回檔案頭保留塊的儲存結構了,
又進一步的瞭解了檔案頭保留塊的儲存及作用。
本次實驗我分了兩種情況:
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步的查詢中,都可以反映出這一點。
又進一步的瞭解了檔案頭保留塊的儲存及作用。
本次實驗我分了兩種情況:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 塊儲存 檔案儲存 物件儲存物件
- 資料儲存--檔案儲存
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- win10保留的儲存如何禁用_win10保留的儲存怎麼關閉Win10
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- Android中的資料儲存之檔案儲存Android
- 關於C++的標頭檔案C++
- 本地儲存-系統和保留-系統檔案佔用儲存空間過大的解決方式
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- 檔案儲存
- Electron 開啟儲存檔案對話方塊
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- opencv python 從攝像頭獲取視訊/從檔案獲取視訊 /儲存視訊OpenCVPython
- Android 檔案儲存Android
- CSV檔案儲存
- 儲存json檔案JSON
- IPFS的檔案儲存模式模式
- C語言關於標頭檔案的使用C語言
- Flutter持久化儲存之檔案儲存Flutter持久化
- 資料儲存(歸檔解檔,沙河儲存)
- Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)原始碼BloC
- 大量小檔案不適合儲存於HDFS的原因
- idea檔案頭資訊設定Idea
- python 儲存檔案jsonPythonJSON
- hive檔案儲存格式Hive
- 自建MySQL於阿里雲資料庫檔案儲存DBFS之上的優勢MySql阿里資料庫
- 關於InnoDB表資料和索引資料的儲存索引
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-2 JSON檔案儲存Python爬蟲JSON
- 關於QT的標頭檔案相互包含的問題QT
- 大資料檔案儲存系統HDFS大資料
- Go Web:資料儲存(2)——CSV檔案GoWeb
- 微信儲存的檔案在哪個資料夾
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- 關於轉儲Oracle索引資訊的相關命令Oracle索引
- 檢視BAM檔案頭部資訊
- JavaCV的攝像頭實戰之三:儲存為mp4檔案Java
- python儲存檔案的幾種方法Python
- laradock 檔案儲存遇見的坑
- 設定儲存檔案的目錄