7 x 24 在线支持!
Oracle ASM Disk Header磁盘头自动备份介绍
ASM Disk Header Copy
从版本10.2.0.5开始ASM 会对disk header做一个额外的备份。即aun=1 的最后第二个block中备份了一份KFBTYP_DISKHEAD。 这个ASM Disk header的作用是当真的KFBTYP_DISKHEAD被意外覆盖或损坏时可以使用Oracle 工具 KFED使用repair选项来修复Disk header。
该ASM Disk Header Copy所处的位置
aun=1 的最后第二个block中备份了一份KFBTYP_DISKHEAD
即存放在PST的第blkn=254块(AUSIZE=1M)或blkn=1022块(AUSIZE=4M),注意ASM一般从0开始计数
[oracle@mlab2 hzy]$ kfed read /oracleasm/asm-disk02 aun=1 blkn=1022 aus=4194304 |less
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 1022 ; 0x004: blk=1022
kfbh.block.obj: 2147483649 ; 0x008: disk=1
kfbh.check: 3107059260 ; 0x00c: 0xb931f63c
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: 186646528 ; 0x020: 0x0b200000
kfdhdb.dsknum: 1 ; 0x024: 0x0001
kfdhdb.grptyp: 3 ; 0x026: KFDGTP_HIGH
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: DATA1_0001 ; 0x028: length=10
kfdhdb.grpname: DATA1 ; 0x048: length=5
kfdhdb.fgname: DATA1_0001 ; 0x068: length=10
kfdhdb.capname: ; 0x088: length=0
kfdhdb.crestmp.hi: 32999670 ; 0x0a8: HOUR=0x16 DAYS=0x7 MNTH=0x2 YEAR=0x7de
kfdhdb.crestmp.lo: 1788720128 ; 0x0ac: USEC=0x0 MSEC=0x36d SECS=0x29 MINS=0x1a
kfdhdb.mntstmp.hi: 32999670 ; 0x0b0: HOUR=0x16 DAYS=0x7 MNTH=0x2 YEAR=0x7de
kfdhdb.mntstmp.lo: 1812990976 ; 0x0b4: USEC=0x0 MSEC=0x3 SECS=0x1 MINS=0x1b
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000
kfdhdb.ausize: 4194304 ; 0x0bc: 0x00400000
AUN=1 的最后一个block为KFBTYP_HBEAT 心跳表:
[oracle@mlab2 hzy]$ kfed read /oracleasm/asm-disk02 aun=1 blkn=1023 aus=4194304 |less
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 19 ; 0x002: KFBTYP_HBEAT
kfbh.datfmt: 2 ; 0x003: 0x02
kfbh.block.blk: 2047 ; 0x004: blk=2047
kfbh.block.obj: 2147483649 ; 0x008: disk=1
kfbh.check: 1479766671 ; 0x00c: 0x5833728f
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfdpHbeatB.instance: 1 ; 0x000: 0x00000001
kfdpHbeatB.ts.hi: 32999734 ; 0x004: HOUR=0x16 DAYS=0x9 MNTH=0x2 YEAR=0x7de
kfdpHbeatB.ts.lo: 3968041984 ; 0x008: USEC=0x0 MSEC=0xe1 SECS=0x8 MINS=0x3b
kfdpHbeatB.rnd[0]: 1065296177 ; 0x00c: 0x3f7f2131
kfdpHbeatB.rnd[1]: 857037208 ; 0x010: 0x33155998
kfdpHbeatB.rnd[2]: 2779184235 ; 0x014: 0xa5a6fc6b
kfdpHbeatB.rnd[3]: 2660793989 ; 0x018: 0x9e987e85
KFED REPAIR
10.2.0.5以后的版本当ASM metadata损坏时,可以考虑优先备份ASM disk header并尝试KFED repair 来修复,修复方法很简单 ,确认损坏的是哪个ASM DISK:
$ kfed repair <disk name>
注意如果AU的尺寸不是默认的1MB则会报错:
KFED-00320: Invalid block num1 = [3], num2 = [1], error = [type_kfbh]
虽然报错,但KFED并不会损坏ASM disk header。 用户仅仅需要输入正确的AU SIZE即可
$ kfed repair <disk name> ausz=4194304
PRM
PRM对于ASM metadata数据的损坏采用最大限度的允许,只要FILE 1 文件目录和FILE 6 别名信息还可以读取出来,一般PRM就可以正常将文件从ASM Diskgroup中拷贝出来。