甲骨文中段的HEADER_BLOCK示例详析

  

  

段(段)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件
  

  

是组成逻辑表空间的基本物理存储单位)

  

最近在学习段(段),区间(程度)时,对段的HEADER_BLOCK有一些疑问,本文记录一下探究的实验过程以及相关总结,,如有不对的地方,敬请指出,以斯科特。EMP表为例(下面测试环境为Oracle数据库10 g版本10.2.0.5.0 - 64位生产):

        选择FILE_ID,   BLOCK_ID,   块   从DBA_EXTENTS   老板=,老板的   和SEGMENT_NAME=', TABLE_NAME ';之前      

凹坠俏闹卸蔚腍EADER_BLOCK示例详析”,

        选择HEADER_FILE   ,HEADER_BLOCK   ,字节   块,   ,区段   从DBA_SEGMENTS   所有者=,所有者和SEGMENT_NAME='和SEGMENT_NAME;      

凹坠俏闹卸蔚腍EADER_BLOCK示例详析"

  

如上所示,DBA_SEGMENTS中的HEADER_BLOCK与DBA_EXTENTS的BLOCK_ID不同(HEADER_BLOCK:文件编号为4的第27个块,区间的第一个块的BLOCK_ID为第25个块),这个的原因如下:

  

一个段的第一个区的第一个块是第一层位图块,第二个块是二级位图块,这两个块是用来管理自由块的,第三个块是PAGETABLE段头,这个块才是部门里的HEADER_BLOCK,再后面的块就是用来记录数据的,所以25 + 2=27。详细可以参考《循序渐进ORCLE:数据库管理,优化与备份》这本书的第5章。

  

下面我们创建一个表、测试一下是否也是这个规律,如下所示:

        完成;创建表TEST1.MMM   2   3从DBA_OBJECTS SELECT *;      创建表。      完成;坳SEGMENT_NAME A32;   完成;选择SEGMENT_NAME   2,FILE_ID   3,BLOCK_ID   4块   5从DBA_EXTENTS   6,SEGMENT_NAME=班拧焙退姓?癟EST1”   7 ORDER BY BLOCK_ID ASC;      SEGMENT_NAME FILE_ID BLOCK_ID块   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   嗯76 9 8   嗯76 17日8   嗯76 25日8   嗯76 33 8   嗯76 41 8   嗯76 49 8   嗯76 57 8   嗯76 65 8   嗯76 73 8   嗯76 81 8   嗯76 89 8      SEGMENT_NAME FILE_ID BLOCK_ID块   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   嗯76 97 8   嗯76 105 8   嗯76 113 8   嗯76 121 8   嗯76 129 8   嗯76 137 128   嗯76 265 128   嗯76 393 128   嗯76 521 128   嗯76 649 128   嗯76 777 128      22行选择。      完成;选择HEADER_FILE   2,HEADER_BLOCK   3个字节   4块   5、区段   6从DBA_SEGMENTS   7,主人=TEST1和SEGMENT_NAME='嗯';      HEADER_FILE HEADER_BLOCK字节块区段   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   76 11 7340032 896 22      

如上所示,段对象TEST1。嗯的header_block为11,而对应的区间的第一个块对象ID为9,也是9 + 2=11,确实是如此,那么我们来转储数据块看看,如下所示

        完成;改变系统转储功能76块9;      系统的改变。      完成;改变系统转储功能76块;      系统的改变。      完成;改变系统转储功能76块11;      系统的改变。      完成;选择user_dump.value   2 | | '/'   3 | |低(instance.value)   4 | |“_ora_”   5 | | v process.spid美元   6 | | nvl2 (v $过程。traceid,“_”   7 | | v $过程。traceid零)   8 | |”。曾经的“跟踪文件”   9从v参数user_dump美元   10美元交叉连接v参数实例   11美元交叉连接v过程   美元12 v加入会话   13 alt="甲骨文中段的HEADER_BLOCK示例详析">

  

凹坠俏闹卸蔚腍EADER_BLOCK示例详析"

  

凹坠俏闹卸蔚腍EADER_BLOCK示例详析"

  

不过有一个奇怪的现象,对斯科特。EMP其数据块做转储,发现25日,26日,27日数据块的类型都是反式数据,0 x06表示的块类型为数据块表/集群/索引段。不知是否因为SCOTT.EMP对象位于用户表空间下的缘故。不过用户表空间也是ASSM管理的。具体情况尚不清楚?

甲骨文中段的HEADER_BLOCK示例详析