關於檔案頭保留塊資訊的儲存探索
今天又探索了一回檔案頭保留塊的儲存結構了,
又進一步的瞭解了檔案頭保留塊的儲存及作用。
本次實驗我分了兩種情況:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 塊儲存 檔案儲存 物件儲存物件
- 關於控制檔案與資料檔案頭資訊的說明(zt)
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- win10保留的儲存如何禁用_win10保留的儲存怎麼關閉Win10
- [20170406]關於檔案頭轉儲.txt
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- SQL SERVER 關於檔案儲存一些方法SQLServer
- 關於C++的標頭檔案C++
- 本地儲存-系統和保留-系統檔案佔用儲存空間過大的解決方式
- Electron 開啟儲存檔案對話方塊
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- 檔案儲存
- 關於傳送Http標頭檔案HTTP
- C語言關於標頭檔案的使用C語言
- 資料檔案頭塊保留大小、ROWID、資料檔案最大大小等資料庫限制的說明資料庫
- Oracle檔案頭資訊(zt)Oracle
- IPFS的檔案儲存模式模式
- CIFS檔案的儲存————SMB
- Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)原始碼BloC
- Flutter持久化儲存之檔案儲存Flutter持久化
- 關於資料檔案頭的檢查點SCN
- 大量小檔案不適合儲存於HDFS的原因
- Android中的資料儲存之檔案儲存Android
- Android 檔案儲存Android
- hive檔案儲存格式Hive
- 儲存檔案到本地
- InnoDB儲存引擎檔案儲存引擎
- 06、hdfs檔案儲存
- android: 檔案儲存Android
- 轉儲日誌檔案頭
- 程式執行資訊的非登錄檔儲存類(ini 檔案操作類) (轉)
- ASP.NET下載檔案(彈出開啟儲存檔案對話方塊)ASP.NET
- RAC歸檔配置方案:使用NFS共享儲存儲存歸檔檔案NFS
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- Word在Normal.dot模板檔案中儲存預設資訊ORM
- JavaCV的攝像頭實戰之三:儲存為mp4檔案Java
- 關於事務的儲存過程儲存過程