暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle asm 元数据

原创 四九年入国军 2026-03-09
32

asm 元数据:

disk header 
free space table (FST) --空闲AU位图,快速定位可用空间
Allocation Table (AT)  --记录每个 AU 的分配情况与归属
Partnership and Status Table (PSP)  --伙伴关系与状态表 --每个磁盘组独立一份,存放在所有磁盘的 AU1中
File directory          --ASM 磁盘组里的 “数据字典”,记录所有文件的全部信息。
Disk directory 
Active Change Directory (ACD)

asm 元数据中file信息:

file# 1 -- asm file 1,file directory                                block 1
file# 2 -- asm file 2,disk directory                                block 2
file# 3 -- asm file 3,active change directory ACD                   block 3
file# 4 -- asm file 4,continuing  Operations  Directory COD         block 4
file# 5 -- asm file 5, templete  directory                           block 5
file# 6 -- asm file 6, alias  directory                              block 6



select  number_kffxp file#,disk_kffxp disk#,count(disk_kffxp) extents 
 from x$kffxp
 where group_kffxp=1 and  disk_kffxp <> 65534
group by number_kffxp,disk_kffxp
order by 1;

     FILE#      DISK#    EXTENTS
---------- ---------- ----------
         1          0          1          --file directory,f1b1,这部分不完整抽取工具抽取不了文件
         1          1          1
         2          1          1          --disk directory 
         3          0         50          --acd
         3          1         35
         4          0          5
         4          1          3
         5          0          1         --template directory
         6          0          1         --alias directory
         8          0          1
         9          0          1
       256          0        446        --256是system01,之前的都是元数据   
	   


[grid@node1:/home/grid]$ kfed read /dev/asm_data_1 aun=0 blkn=0
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD                  --类型,磁盘头
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:              2147483648 ; 0x008: disk=0
kfbh.check:                  2101198618 ; 0x00c: 0x7d3dbf1a
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                186647552 ; 0x020: 0x0b200400
kfdhdb.dsknum:                        0 ; 0x024: 0x0000                         --BLOCK 编号
kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL                --磁盘组冗余方式
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER                  --磁盘头的状态,3=可用
kfdhdb.dskname:               DATA_0000 ; 0x028: length=9
kfdhdb.grpname:                    DATA ; 0x048: length=4                       --磁盘组名字
kfdhdb.fgname:                DATA_0000 ; 0x068: length=9
kfdhdb.capname:                         ; 0x088: length=0
kfdhdb.crestmp.hi:             33196006 ; 0x0a8: HOUR=0x6 DAYS=0x1f MNTH=0x1 YEAR=0x7ea   --create 时间戳
kfdhdb.crestmp.lo:           2014724096 ; 0x0ac: USEC=0x0 MSEC=0x190 SECS=0x1 MINS=0x1e
kfdhdb.mntstmp.hi:             33196503 ; 0x0b0: HOUR=0x17 DAYS=0xe MNTH=0x2 YEAR=0x7ea   --最后一次mount的时间戳信息
kfdhdb.mntstmp.lo:           2827626496 ; 0x0b4: USEC=0x0 MSEC=0x28a SECS=0x8 MINS=0x2a
kfdhdb.secsize:                     512 ; 0x0b8: 0x0200                                 --扇区大小
kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000                                 --块大小
kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000                             --au大小,默认1M
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize:                   30720 ; 0x0c4: 0x00007800                             --磁盘大小,单位是AU
kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001
kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002                             --第一个文件第一个block开始的位置--类似file directory的入口
kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]:                0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]:                0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000
kfdhdb.dbcompat:              186647552 ; 0x0e0: 0x0b200400
kfdhdb.grpstmp.hi:             33196006 ; 0x0e4: HOUR=0x6 DAYS=0x1f MNTH=0x1 YEAR=0x7ea
kfdhdb.grpstmp.lo:           2014199808 ; 0x0e8: USEC=0x0 MSEC=0x390 SECS=0x0 MINS=0x1e
kfdhdb.vfstart:                       0 ; 0x0ec: 0x00000000


--在file directory里查看某个数据文件的AU分布
----这里查看259 的au分布: users.259.1223967045

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME       PATH
------------ ----------- ---------- ------------------------------
           2           0 OCR_0000   /dev/asm_ocr_1
           1           1 DATA_0001  /dev/asm_data_2
           1           0 DATA_0000  /dev/asm_data_1

select  disk_kffxp,au_kffxp,xnum_kffxp
 from x$kffxp
 where group_kffxp=1
 and number_kffxp=281 order by 1;
DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         0        807          0
         0        808          2
         0        809          4
         0        810          5
         1        538          3
         1        537          1 



		   

kfed read /dev/asm_data_1 | grep f1b1
--kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002

--一个au 1M,一个block 4k,最多存放1024/4=256个block,对于256个数据文件
--file directory 在AU=2的blkn=1上,查找下一个AU位置
--259-256=3 存在第三个block(如果au=4m,可以存放1024个block,对应1024个数据文件,就不需要减了)

--blkn=0是保留,所以从1开始

kfed read /dev/asm_data_1   aun=2 blkn=1 | more
...............
kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  40 ; 0x4a7: 0x28
kfffde[1].xptr.au:                   41 ; 0x4a8: 0x00000029           --下一个AU=41,
kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001               --disk=1,第二个硬盘
......................

kfed read /dev/asm_data_2 aun=41 blkn=3 | more
........................
kfbh.block.blk:                     259 ; 0x004: blk=259
kfffde[0].xptr.au:                  807 ; 0x4a0: 0x00000327
kfffde[2].xptr.au:                  808 ; 0x4b0: 0x00000328
kfffde[4].xptr.au:                  809 ; 0x4c0: 0x00000329
kfffde[5].xptr.au:                  810 ; 0x4c8: 0x0000032a
kfffde[6].xptr.au:           4294967295 ; 0x4d0: 0xffffffff

--对应完成



--查看别名信息:
--先确定f1b1 所在的AU,然后查看block 6

 kfed read /dev/asm_data_1 aun=2  blkn=6 | more

--查看au指针,这里指向第一个文件的AU=29
kfffde[0].xptr.au:                   29 ; 0x4a0: 0x0000001d       --AU=29   
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000           --第1号文件

 kfed read /dev/asm_data_1 aun=29  blkn=0 | more  

kfbh.type:                           11 ; 0x002: KFBTYP_ALIASDIR  --别名目录


 
 
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论