返回小栈
12_深入解析Oracle FLM段头块结构
orastar2020-03-23 14:25:41

一、    概念介绍



在Oracle数据库中使用free list管理空闲空间(free space)的表叫做Free List Managed (FLM)表。在FLM中将高水位以下空闲块的dba地址通过单向链表连接,用于业务表的insert和update操作,本节以system表空间中C_USER#的段头块信息为例,使用Oracle bbed和Oracle dump工具解析flm段头块结构。

 

二、    测试数据信息



SQL> select segment_name, segment_type,header_file, header_block, extents, max_extents

 fromdba_segments

 where segment_name = 'C_USER#';  2   3 

 

SEGMENT_NAME  SEGMENT_TYPE      HEADER_FILEHEADER_BLOCK  EXTENTS MAX_EXTENTS

-------------------- ----------------------------- ------------ ---------- -----------

C_USER#              CLUSTER                             1       208           1 2147483645

 

SQL>

SQL> select segment_name,tablespace_name, extent_id, file_id, block_id, blocks

 fromdba_extents

 where segment_name = 'C_USER#';  2   3 

 

SEGMENT_NAME    TABLESPACE_NAME            EXTENT_ID         FILE_ID  BLOCK_ID    BLOCKS

-------------------- ------------------------------ ---------- ---------- ----------

C_USER#              SYSTEM                       0               1       208         8

 

SQL>

 

三、    flm表块分布



   seghdr块是flm表中extent 0的第一个数据块。使用Oracle dump工具分析表的段头块信息,

alter session set tracefile_identifier='orastar_flm_1';

oradebug setmypid

alter system dump datafile 1 block 208;

oradebug close_trace

oradebug tracefile_name

 

输出文件:/u01/app/oracle/diag/rdbms/epmsn/epmsn/trace/epmsn_ora_15664_orastar_flm_1.trc

1 flm sgmentlayout

四、    flm物理结构



flm物理结构由CacheHeader、Extent Control、ExtentTable、Segment Header Control、SegmentFree Space Array及Transaction Free Space Array六层结构组成,

2 flm sgmhdr结构

4.1      Cache Header

3 bbed kchb

4 dump kchb

 

4.2         Extent Control

5 bbed ExtentControl Header

 

6 dump ExtentControl Header

 

7 bbed MapHeader

4.3         Extent Table

extent map中包括1map信息,从0x004000d1开始的7blocks

 

BBED> p ktetb

struct ktetb[0], 8 bytes                    @108    

  ub4 ktetbdba                            @108      0x004000d1

  ub4 ktetbnbk                            @112      0x00000007

 

BBED>

 


8 bbed ExtentMap

 


9 rdba of ExtentMap

 

4.4         Segment Header Control

 


10 bbed SegmentHeader Control

4.5         Segment Free Space Array

表示hwm以下的数据块的状态,

flg:: 表示free list是否被使用,状态有usedunused 2个状态。

lhd: 表示free list的头块地址。

ltl: 表示free list的尾块地址。

 


11 bbed SegmentFree Space Array

 


12 dump SegmentFree Space Array

 

4.6         Transaction Free Space Array

13 bbed TransactionFree Space Array

 


14 dump TransactionFree Space Array



五、    说明


1、以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正。

2、文章涉及内容,请勿生产环境模拟。


 


纸上得来终觉浅,绝知此事要躬行。--陆游



感谢您的阅读,如果您觉得有所收获,也欢迎把文章分享给您的朋友。



长按识别二维码关注我们



0
0