亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

ORACLE中段的HEADER_BLOCK示例詳析

2024-08-29 14:01:13
字體:
來源:轉載
供稿:網友

前言

段(segment)是一種在數據庫中消耗物理存儲空間的任何實體(一個段可能存在于多個數據文件中,因為物理的數據文件

是組成邏輯表空間的基本物理存儲單位)

最近在學習段(segment)、區間(extent)時,對段的HEADER_BLOCK有一些疑問,本文記錄一下探究的實驗過程以及相關總結,,如有不對的地方,敬請指出。以SCOTT.EMP表為例(下面測試環境為Oracle Database 10g Release 10.2.0.5.0 - 64bit Production):

SELECT FILE_ID,   BLOCK_ID,   BLOCKS FROM DBA_EXTENTS WHERE OWNER ='&OWNER'  AND SEGMENT_NAME = '&TABLE_NAME'; 

ORACLE,HEADER_BLOCK

SELECT HEADER_FILE  , HEADER_BLOCK  , BYTES  , BLOCKS  , EXTENTS FROM DBA_SEGMENTS WHERE OWNER='&OWNER' AND SEGMENT_NAME='&SEGMENT_NAME';

ORACLE,HEADER_BLOCK

如上所示,DBA_SEGMENTS 中的HEADER_BLOCK 與DBA_EXTENTS的BLOCK_ID不同(HEADER_BLOCK:文件ID為4的第27個塊,區間的第一個塊的BLOCK_ID為第25個塊),這個的原因如下:

一個segment的第一個區的第一個塊是FIRST LEVEL BITMAP BLOCK,第二個塊是SECOND LEVEL BITMAP BLOCK,這兩個塊是用來管理free block的,第三個塊是PAGETABLE SEGMENT HEADER,這個塊才是segment里的HEADER_BLOCK,再后面的塊就是用來記錄數據的。所以25+2=27. 詳細可以參考《循序漸進ORCLE:數據庫管理、優化與備份》這本書的第5章。

下面我們創建一個表,測試一下是否也是這個規律,如下所示:

SQL> CREATE TABLE TEST1.MMM  2 AS 3 SELECT * FROM DBA_OBJECTS; Table created. SQL> COL SEGMENT_NAME FOR A32;SQL> SELECT SEGMENT_NAME 2   ,FILE_ID 3   ,BLOCK_ID 4   ,BLOCKS 5 FROM DBA_EXTENTS  6 WHERE SEGMENT_NAME='MMM' AND OWNER='TEST1' 7 ORDER BY BLOCK_ID ASC; SEGMENT_NAME      FILE_ID BLOCK_ID  BLOCKS-------------------------------- ---------- ---------- ----------MMM          76   9   8MMM          76   17   8MMM          76   25   8MMM          76   33   8MMM          76   41   8MMM          76   49   8MMM          76   57   8MMM          76   65   8MMM          76   73   8MMM          76   81   8MMM          76   89   8 SEGMENT_NAME      FILE_ID BLOCK_ID  BLOCKS-------------------------------- ---------- ---------- ----------MMM          76   97   8MMM          76  105   8MMM          76  113   8MMM          76  121   8MMM          76  129   8MMM          76  137  128MMM          76  265  128MMM          76  393  128MMM          76  521  128MMM          76  649  128MMM          76  777  128 22 rows selected. SQL> SELECT HEADER_FILE 2  , HEADER_BLOCK 3  , BYTES 4  , BLOCKS 5  , EXTENTS  6 FROM DBA_SEGMENTS  7 WHERE OWNER='TEST1' AND SEGMENT_NAME='MMM'; HEADER_FILE HEADER_BLOCK  BYTES  BLOCKS EXTENTS----------- ------------ ---------- ---------- ----------   76   11 7340032  896   22

如上所示,段對象TEST1.MMM的header_block為11 ,而對應的區間的第一個塊對象ID為9, 也是9+2=11,確實是如此,那么我們來DUMP數據塊看看,如下所示

SQL> alter system dump datafile 76 block 9; System altered. SQL> alter system dump datafile 76 block 10; System altered. SQL> alter system dump datafile 76 block 11; System altered. SQL> select user_dump.value  2   || '/'  3   || lower(instance.value)  4   || '_ora_'  5   || v$process.spid  6   || nvl2(v$process.traceid, '_'  7         || v$process.traceid, null)  8   || '.trc'"trace file"  9 from v$parameter user_dump  10   cross join v$parameter instance  11   cross join v$process  12   join v$session  13   on v$process.addr = v$session.paddr  14 where user_dump.name = 'user_dump_dest'  15   and instance.name = 'instance_name'  16   and v$session.audsid = sys_context('userenv', 'sessionid');  trace file--------------------------------------------------------------------------------/u01/app/oracle/admin/SCM2/udump/scm2_ora_22642.trc

第一個區的第一個塊(block_id=9)是FIRST LEVEL BITMAP BLOCK,第二個塊(block_id=10)是SECOND LEVEL BITMAP BLOCK,這兩個塊是用來管理free block的,第三個塊(block_id=11)是PAGETABLE SEGMENT HEADER,這個塊才是segment里的HEADER_BLOCK,再后面的塊就是用來記錄數據的

ORACLE,HEADER_BLOCK

ORACLE,HEADER_BLOCK

ORACLE,HEADER_BLOCK

不過有一個奇怪的現象,對SCOTT.EMP其數據塊做dump,發現25、26、27數據塊的type都是trans data,0x06表示的Block Type為 Table/cluster/index segment data block 。 不知是否因為SCOTT.EMP對象位于USERS表空間下的緣故。不過USER表空間也是ASSM管理的。具體情況尚不清楚?

ORACLE,HEADER_BLOCK

SQL> SELECT TABLESPACE_NAME 2  , SEGMENT_SPACE_MANAGEMENT 3  , ALLOCATION_TYPE 4  , EXTENT_MANAGEMENT 5 FROM DBA_TABLESPACES 6 WHERE TABLESPACE_NAME='USERS'; TABLESPACE_NAME    SEGMEN ALLOCATIO EXTENT_MAN------------------------------ ------ --------- ----------USERS       AUTO SYSTEM LOCAL

那么是否所有的HEADER_BLOCK都是位于段的第三個block呢?是否還跟段空間管理的方式有關呢? 我們用如下實驗來探究一下:創建一個手工段空間管理(Manual Segment Space Management)的表空間。

SQL> CREATE TABLESPACE TBS_TEST_DATA 2 DATAFILE '/u03/oradata/gsp/tbs_test_data_001.dbf' 3 SIZE 20M  4 EXTENT MANAGEMENT LOCAL AUTOALLOCATE 5 SEGMENT SPACE MANAGEMENT MANUAL ONLINE; Tablespace created.  SQL> create user test identified by test123456 2 default tablespace tbs_test_data; User created. SQL> grant connect, resource to test; Grant succeeded. SQL> CREATE TABLE TEST.KKK  2 AS 3 SELECT * FROM DBA_OBJECTS; Table created. SQL> COL SEGMENT_NAME FOR A32;SQL> SELECT SEGMENT_NAME 2  ,FILE_ID 3  ,BLOCK_ID 4  ,BLOCKS 5 FROM DBA_EXTENTS  6 WHERE SEGMENT_NAME='KKK' AND OWNER='TEST' 7 ORDER BY BLOCK_ID ASC; SEGMENT_NAME      FILE_ID BLOCK_ID  BLOCKS-------------------------------- ---------- ---------- ----------KKK          39  427785  128KKK          43  435249   8KKK          43  435257   8KKK          43  435265   8KKK          43  435273   8KKK          43  435281   8KKK          43  435289   8KKK          43  435297   8KKK          43  435305   8KKK          43  435313   8KKK          43  435321   8 SEGMENT_NAME      FILE_ID BLOCK_ID  BLOCKS-------------------------------- ---------- ---------- ----------KKK          43  435329   8KKK          48  436745   8KKK          48  436753   8KKK          48  436761   8KKK          48  436769   8KKK          48  436777   8KKK          48  436873  128KKK          40  444297  128KKK          43  447241  128KKK          52  449545  128KKK          2  458249  128 22 rows selected. SQL> SELECT HEADER_FILE 2  , HEADER_BLOCK 3  , BYTES 4  , BLOCKS 5  , EXTENTS  6 FROM DBA_SEGMENTS  7 WHERE OWNER='TEST' AND SEGMENT_NAME='KKK'; HEADER_FILE HEADER_BLOCK  BYTES  BLOCKS EXTENTS----------- ------------ ---------- ---------- ----------   43  435249 7340032  896   22 SQL> 

ORACLE,HEADER_BLOCK

SQL> alter system dump datafile 43 block 435249; System altered. SQL> select user_dump.value  2   || '/'  3   || lower(instance.value)  4   || '_ora_'  5   || v$process.spid  6   || nvl2(v$process.traceid, '_'  7         || v$process.traceid, null)  8   || '.trc'"trace file"  9 from v$parameter user_dump  10   cross join v$parameter instance  11   cross join v$process  12   join v$session  13   on v$process.addr = v$session.paddr  14 where user_dump.name = 'user_dump_dest'  15   and instance.name = 'instance_name'  16   and v$session.audsid = sys_context('userenv', 'sessionid');  trace file--------------------------------------------------------------------/u01/app/oracle/admin/SCM2/udump/scm2_ora_27792.trc

如下所示,塊類型為DATA SEGEMENT HEADER -UNLIMITED , rdba:( segment header的塊地址為)為 0x0ac6a431 .其實這是第一個塊(不是以block_id大小來看),因為手工段空間管理,這種技術的具體實現方式是通過在段頭(Segment Header)分配自由列表(freelist)來管理Block的使用。簡單一點,你可以把自由列表想象成一個數據結構中的鏈表一樣的數據結構,ORACLE通過一系列算法向自由列表(freelist)中加入或移出Block來實現段管理。

ORACLE,HEADER_BLOCK

Segment Header是一個Segment的第一個extent的頭塊(第一個塊)。在FLM管理的Segment中,header block始終是segment 的第一個塊。 如下所示,在Extent Map中,第一個區間的地址為0x0ac6a432, 恰恰跟segment header的塊地址 0x0ac6a431 相差為1,這意味著后面的分配是緊挨著segment header的塊地址。 所以在手工段空間管理(Manual Segment Space Management)的表空間,不能以block_id的大小順序來看區間分配順序。也就是說FILE_ID=39 BLOCK_ID=427785的塊并不是第一個區間的第一個塊。這也是我在實驗當中糾結了好久的地方。

ORACLE,HEADER_BLOCK

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合成人婷婷小说| 亚洲综合在线做性| 亚洲成**性毛茸茸| 中文字幕视频一区二区在线有码| 综合久久五月天| 亚洲丁香婷深爱综合| 在线观看不卡av| 国产精品视频999| 亚洲欧洲成视频免费观看| 亚洲成人国产精品| 国内精品久久久| 亚洲第一男人天堂| 日韩av在线电影网| 日韩中文在线中文网在线观看| 久久亚洲国产成人| 国产精品18久久久久久首页狼| 在线精品高清中文字幕| 中文字幕在线日韩| 国产日韩欧美黄色| 亚洲韩国欧洲国产日产av| 色综合五月天导航| 亚洲新声在线观看| 91精品国产91久久| 亚洲影视中文字幕| 亚洲欧洲成视频免费观看| 高清欧美性猛交| 中文字幕亚洲精品| 成人xxxxx| 亚洲视频axxx| 菠萝蜜影院一区二区免费| 91精品啪aⅴ在线观看国产| 欧美另类老女人| 亚洲影院在线看| 欧美一级视频在线观看| 97超碰蝌蚪网人人做人人爽| 成人福利视频在线观看| 欧美激情一区二区三区成人| 国产自产女人91一区在线观看| 欧美精品一区三区| 91影视免费在线观看| 亚洲人成五月天| 久久噜噜噜精品国产亚洲综合| 亚洲九九九在线观看| 亚洲一级片在线看| 国产精品久久久久久久久久新婚| 亚洲欧美日韩在线高清直播| 国产婷婷成人久久av免费高清| 日韩资源在线观看| 欧美自拍大量在线观看| 久久国产精品偷| 97人人做人人爱| 久久久久久久久久久av| 国产欧美亚洲视频| 日韩精品高清在线观看| 色婷婷综合久久久久中文字幕1| 久久久999成人| 亚洲国产精品va在看黑人| 国产精品久久久久秋霞鲁丝| 成人a级免费视频| 97国产一区二区精品久久呦| www.国产一区| 成人激情视频免费在线| 欧美丰满片xxx777| 热门国产精品亚洲第一区在线| 久久综合国产精品台湾中文娱乐网| 成人在线精品视频| 国产精品美女在线| 欧美激情一二区| 色琪琪综合男人的天堂aⅴ视频| 欧美日本亚洲视频| 色偷偷噜噜噜亚洲男人| 国产69精品久久久| 欧美国产日产韩国视频| 国产伦精品一区二区三区精品视频| 在线国产精品播放| 国产亚洲欧洲高清一区| 久久99视频精品| 国产精品欧美日韩一区二区| 国产精品中文字幕在线观看| 亚洲美女中文字幕| 久久6免费高清热精品| 久久国产精品99国产精| 91麻豆国产语对白在线观看| 国产成人97精品免费看片| 国产精品一区二区三区在线播放| 国产成人精品电影久久久| 久热国产精品视频| 日韩欧美成人免费视频| 91成人天堂久久成人| 欧美天天综合色影久久精品| 4438全国成人免费| 日韩视频在线免费| 在线丨暗呦小u女国产精品| 亚洲精品国产综合区久久久久久久| 国产精品久久久久久久av大片| 欧美激情欧美狂野欧美精品| 久久精品电影一区二区| 日本久久亚洲电影| 国产视频精品xxxx| 亚洲第一精品自拍| 国产精品日韩久久久久| 欧美精品国产精品日韩精品| 亚洲精品99久久久久中文字幕| 久久伊人免费视频| 亚洲老头同性xxxxx| 亚洲国产成人av在线| 国产中文字幕日韩| 国产精品一区久久| 亚洲美女在线视频| 国产精品国产亚洲伊人久久| 亚洲激情视频网站| 啊v视频在线一区二区三区| 亚洲欧美日韩另类| 亲爱的老师9免费观看全集电视剧| 国产精品va在线播放我和闺蜜| 日韩av中文字幕在线免费观看| www.欧美三级电影.com| 精品综合久久久久久97| 日韩成人中文字幕在线观看| 91成品人片a无限观看| 欧美性理论片在线观看片免费| 中文字幕九色91在线| 欧美大尺度激情区在线播放| 国产精品国产三级国产专播精品人| 国产精品一区二区三| 久久99热这里只有精品国产| 久久综合伊人77777尤物| 久久99久久99精品中文字幕| 91精品国产自产在线观看永久| 亚洲精品自产拍| 欧美极品第一页| 亚洲永久在线观看| 日本一区二三区好的精华液| 久久在线免费视频| 国产午夜精品全部视频播放| 在线观看亚洲视频| 91青草视频久久| 久久精品国产视频| 日韩亚洲国产中文字幕| 亚洲精美色品网站| 亚洲国产欧美久久| 国产亚洲美女久久| 久久精品久久久久久国产 免费| 91精品在线观| 91精品久久久久久综合乱菊| 九九久久综合网站| 亚洲精品中文字幕av| 国产精品福利在线观看网址| 日韩中文有码在线视频| 欧美第一淫aaasss性| 97精品欧美一区二区三区| 日韩一区视频在线| 欧美在线免费视频| 久久影院资源站| 91精品视频专区| 免费av在线一区| 国产精品日日做人人爱| 亚洲成人网久久久| 69av在线播放| 国产亚洲精品久久久久久| 欧美性xxxx极品hd满灌| 国产精品2018| 久久影视电视剧免费网站清宫辞电视| 国产精品一区二区久久久久|