一、概念介绍
Oracle ASSM(Automatic Segment Space Managed)使用位图来管理数据库中的空间,具有管理简单、高并发等优点,ASSM的整体结构是3层位图块+数据块,即4层的树状结构,如下所示,
Oracle ASSM中Segment Header内部结构由Cache Header、Header Control及L2 BMB array三层结构组成,Oracle数据块类型代码为“type: 0x23=PAGETABLE SEGMENT HEADER”,由于bbed工具不支持查询Segment Header的物理结构,本节主要使用C语言解析Segment Header物理结构。
二、使用bbed查看PAGETABLE SEGMENT HEADER结构
SQL> create table hsql.orastar_1(c_char char(10),c_vchar varchar2(10));
Table created.
SQL> insert into hsql.orastar_1 values('a','a');
1 row created.
SQL> insert into hsql.orastar_1 values('b','bb');
1 row created.
SQL> commit;
Commit complete.
set linesize 200 pagesize 200
col owner for a10
col segment_name for a10
select owner,segment_name,header_file,header_block,SEGMENT_TYPE from dba_segments where segment_name='ORASTAR_1';
OWNER SEGMENT_NA HEADER_FILE HEADER_BLOCK SEGMENT_TYPE
---------- ---------- ----------- ------------ ------------------
HSQL ORASTAR_15 1698 TABLE
BBED: Release 2.0.0.0.0 - Limited Production on Fri Jan 10 18:45:52 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set dba 5,1698
DBA 0x014006a2 (20973218 5,1698)
BBED> map v
File: oradata/epmsn/hsql01.dbf (5)
Block: 1698 Dba:0x014006a2
------------------------------------------------------------
BBED-00400: invalid blocktype (35)
BBED>
三、dump结构解析
alter session set tracefile_identifier='orastar_01';
oradebug setmypid
alter system dump datafile 5 block 1698;
oradebug close_trace
oradebug tracefile_name