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

首頁 > 數據庫 > Oracle > 正文

ORACLE中段的HEADER_BLOCK示例詳析

2020-07-26 14:00:17
字體:
來源:轉載
供稿:網友

前言

段(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'; 

 

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

如上所示,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,再后面的塊就是用來記錄數據的

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

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> 

 

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來實現段管理。

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的塊并不是第一個區間的第一個塊。這也是我在實驗當中糾結了好久的地方。

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人中文字幕| 日本亚洲欧洲色| 亚洲男人第一网站| 欧美大片大片在线播放| 欧美在线视频免费| 精品欧美一区二区三区| 久久久噜噜噜久久| 欧美日本亚洲视频| 97久久久免费福利网址| 懂色av一区二区三区| 国产精品免费一区二区三区都可以| 俺也去精品视频在线观看| 疯狂欧美牲乱大交777| 亚洲人成免费电影| 欧美激情第三页| 久久综合久中文字幕青草| 97超碰蝌蚪网人人做人人爽| 国产精品久久久久久久一区探花| 91高清免费视频| 1769国内精品视频在线播放| 亚洲理论在线a中文字幕| 欧美精品www| 欧美成人亚洲成人日韩成人| 97香蕉久久超级碰碰高清版| 欧美大尺度在线观看| 欧美在线国产精品| 欧美孕妇与黑人孕交| 青青草99啪国产免费| 亚洲人成免费电影| 国产91热爆ts人妖在线| www.欧美三级电影.com| 伊人久久大香线蕉av一区二区| 一本一本久久a久久精品综合小说| 日韩高清人体午夜| 九九热这里只有精品6| www.亚洲男人天堂| 国产精品国内视频| 麻豆乱码国产一区二区三区| 欧美成人中文字幕| 国产99久久精品一区二区 夜夜躁日日躁| 日韩欧美一区二区三区久久| 国产精品视频一| 欧美日韩在线看| 久久99国产精品自在自在app| 亚洲字幕一区二区| 韩国视频理论视频久久| 亚洲国产精久久久久久久| 国产精品丝袜一区二区三区| 国产精品色婷婷视频| 粗暴蹂躏中文一区二区三区| 亚洲免费伊人电影在线观看av| 亚洲激情成人网| 精品久久久久久久久久久久久| 欧美大片网站在线观看| 精品国产一区二区三区久久久| 俺去了亚洲欧美日韩| 亚洲国产精品yw在线观看| 亚洲专区中文字幕| 国产精品久久久久国产a级| 日韩精品在线私人| 在线成人激情视频| 国产精品男人的天堂| 国产精品99久久久久久白浆小说| 色阁综合伊人av| 亚洲第一福利网| 精品久久久久久久久久| 国产脚交av在线一区二区| 欧美日韩在线视频一区二区| 日韩高清电影好看的电视剧电影| 日韩欧美亚洲综合| 国内精品中文字幕| 欧美大成色www永久网站婷| 亚洲精品按摩视频| 国语自产偷拍精品视频偷| 亚洲欧洲午夜一线一品| 久久成年人视频| 激情久久av一区av二区av三区| 欧美日韩在线一区| 欧美老女人性视频| 国产精品mp4| 在线日韩第一页| 久久国产精品久久久久久久久久| 欧美日韩色婷婷| 中文字幕在线成人| 成人精品视频99在线观看免费| 国产v综合ⅴ日韩v欧美大片| 久久久噜噜噜久久久| 久久99久久99精品免观看粉嫩| 国产精品极品美女在线观看免费| 欧美另类极品videosbest最新版本| 97婷婷大伊香蕉精品视频| 欧美日韩一区二区精品| 成人免费大片黄在线播放| 亚洲人成网站999久久久综合| 最近免费中文字幕视频2019| 国产女同一区二区| 中文字幕自拍vr一区二区三区| 欧美精品在线免费播放| 久久久女女女女999久久| 久久视频中文字幕| 欧美性视频精品| 日本国产一区二区三区| 成人网在线观看| 色吧影院999| 亚洲精品白浆高清久久久久久| 欧美日韩免费在线观看| 久久久久国产一区二区三区| 欧美电影免费观看大全| 欧美夫妻性生活xx| 久久艳片www.17c.com| 国产亚洲精品va在线观看| 在线视频日本亚洲性| 992tv在线成人免费观看| 国产精品久久久久久av下载红粉| 亚洲成色www8888| 亚洲欧洲在线观看| 国产精品午夜国产小视频| 日韩美女视频中文字幕| 欧美黑人性生活视频| 日韩精品视频中文在线观看| 国产精品成人国产乱一区| 日本精品久久久久久久| 一个色综合导航| 38少妇精品导航| 日韩中文娱乐网| 亚洲第一精品夜夜躁人人爽| 国产精品欧美日韩久久| 96sao精品视频在线观看| 久久91超碰青草是什么| 久久久亚洲国产天美传媒修理工| 亚洲男人的天堂网站| 亚洲图片制服诱惑| 国内精品久久久久伊人av| 精品欧美激情精品一区| 亚洲日本aⅴ片在线观看香蕉| 精品一区二区三区三区| 亚洲国产欧美一区二区三区同亚洲| 在线观看国产成人av片| 色一区av在线| 日韩电影大片中文字幕| 国产欧美日韩中文字幕| 精品国产乱码久久久久久婷婷| 一本大道亚洲视频| 亚洲日本中文字幕免费在线不卡| 国产日韩在线看片| 日韩中文在线不卡| 久久精品成人动漫| 国产一区二区三区视频免费| 国产一区二区三区在线观看网站| 欧美影院成年免费版| 最新国产精品拍自在线播放| 国产精品自产拍在线观| 成人妇女免费播放久久久| 欧美视频免费在线| 日韩av免费观影| 欧美激情精品久久久久| 欧美午夜丰满在线18影院| 亚洲国产精品系列| 日韩最新在线视频| 亚洲国产美女精品久久久久∴| 日韩国产在线看| 国产免费一区二区三区在线观看| 日韩精品在线免费| 日韩av片永久免费网站|