Email: service@parnassusdata.com 7 x 24 online support!

Oracle ASM Disk Header磁盘头自动备份介绍

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中拷贝出来。