http://blog.itpub.net/28227905/viewspace-1059782/
oracle 10.2.0.5以后的版本,oracle ASM磁盘组头部使用自动备份机制,可以在磁盘头损坏的情况下,可以使用kfed repair进行修复.
(注意,该方法不适用oracle 10.2.0.4以前版本!)
修复过程如下:
[@more@]1. 磁盘组头部备份的位置:
AU SIZE =1M 备份块 blkn=510
AU SIZE =2M 备份块 blkn=1022
AU SIZE =4M 备份块 blkn=2046
AU SIZE =8M 备份块 blkn=4094
AU SIZE =16M 备份块 blkn=8190
AU SIZE =32M 备份块 blkn=16382
AU SIZE =64M 备份块 blkn=32766
2. 卸载测试磁盘组TEST
SQL> alter diskgroup test dismount;
Diskgroup altered.
3. TEST磁盘组有2个磁盘
brw-rw---- 1 grid asmadmin 8, 81 Nov 17 10:16 VOL_TEST01
brw-rw---- 1 grid asmadmin 8, 97 Nov 17 10:16 VOL_TEST02
4. 模拟其中一个磁盘损坏
[grid@dbhouse disks]$ kfed read VOL_TEST01|more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD ###目前是正常的.
……..
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 ###AU=1M
………
[grid[grid@dbhouse disks]$ kfed read VOL_TEST01
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: 0x00000000B7EAA200 00000000 00000000 00000000 00000000 [................]
Repeat 255 times
KFED-00322: Invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]
5. 装载TEST磁盘组报错:
SQL> alter diskgroup test mount;
alter diskgroup test mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "0" is missing from group number "4"
6. 使用kfed repair修复test磁盘头部
根据ASM磁盘组头部备份的位置,进行磁盘组修复.因为我这里事先知道TEST磁盘组的AU=1M,那么磁盘组头部的备份位置就是blkn=510,所以,我这里就可以直接修复磁盘.
[grid@dbhouse disks]$ kfed repair VOL_TEST01
7. 成功装载TEST磁盘组
SQL> alter diskgroup test mount;
Diskgroup altered.