Oracle kfed简单修复ASM磁盘头

  • 介绍:

由于磁盘头的信息相对简单而且变化很小,特别是同一磁盘组的磁盘,每个磁盘头的信息几乎一致,而当我们了解了磁盘头的信息后,一旦某个磁盘头的信息出现了问题,我们可以利用其他磁盘头信息然后通过kfed工具对其进行修改和调整,达到修复的目的。其中用得最多的是读取(Read)、修复(Repair)和合并(Merge)三个操作。

首先大家要明确一点,Oracle正因为知道ASM磁盘头的重要性,因此默认情况下,就对其进行了镜像备份,有点类似于控制文件。在每个ASM文件的第一个AU位置,是磁盘头信息,而第1个AU位置最后第2个数据块中,默认情况下就是对磁盘头信息的镜像备份,如AU的缺省大小是1M时,那个数据块就是254,我们可以直接查询

  • 实验测试:

磁盘头信息:

[oracle@rac01~]$ kfed read /dev/asm-disk1 aun=0 blkn=0|more

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:               3871657466 ; 0x00c: 0xe6c4cdfa
kfbh.fcn.base:             4195 ; 0x010: 0x00001063
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

1号AU倒数第二个数据块信息:

[oracle@rac01~]$ kfed read /dev/asm-disk1 aun=1 blkn=254|more

kfbh.endian:             1 ; 0x000: 0x01
kfbh.hard:             130 ; 0x001: 0x82
kfbh.type:              1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt:             1 ; 0x003: 0x01
kfbh.block.blk:           254 ; 0x004: blk=254
kfbh.block.obj:       2147483648 ; 0x008: disk=0
kfbh.check:         3871657220 ; 0x00c: 0xe6c4cd04
kfbh.fcn.base:           4195 ; 0x010: 0x00001063
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

​ 可以看到查询出来的内容同样也是磁盘头内容,这部分是ORACLE自行备份的信息,但是注意该特性只在10.2.0.5及以上版本才有,10.2.0.4版本数据库没有这部分信息。

利用dd命令清空 /dev/asm-disk1****磁盘头:


[grid@rac1 ~]$ dd if=/dev/zero of=/dev/asm-disk1 bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000104572 s, 39.2 MB/s

再次查看:

**[grid@rac1 ~]$ kfed read /dev/asm-disk1 aun=0 blkn=0 | more**
kfbh.endian:             0 ; 0x000: 0x00
kfbh.hard:              0 ; 0x001: 0x00
kfbh.type:              0 ; 0x002: KFBTYP_INVALID
kfbh.datfmt:             0 ; 0x003: 0x00
kfbh.block.blk:            0 ; 0x004: blk=0
kfbh.block.obj:            0 ; 0x008: file=0
kfbh.check:              0 ; 0x00c: 0x00000000
kfbh.fcn.base:            0 ; 0x010: 0x00000000
kfbh.fcn.wrap:            0 ; 0x014: 0x00000000
kfbh.spare1:             0 ; 0x018: 0x00000000
kfbh.spare2:             0 ; 0x01c: 0x00000000
7F3EC93EE400 00000000 00000000 00000000 00000000 [................]
 Repeat 255 times
KFED-00322: Invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]

kfbh.type: 0 ; 0x002: KFBTYP_INVALID //磁盘头状态损坏

使用repair自动利用备份进行修复:

[grid@rac1 ~]$ kfed repair /dev/asm-disk1

再次查看:


[grid@rac1 ~]$ kfed read /dev/asm-disk1 aun=0 blkn=0 | more
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:         3871657466 ; 0x00c: 0xe6c4cdfa
kfbh.fcn.base:           4195 ; 0x010: 0x00001063
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

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

修复完成。

很简单

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值