一、 kfed 备份 / 恢复
1 、备份
kfed read /dev/data text=/tmp/data.head
2 、模拟破坏
[grid@rac1 ~]$ dd if=/dev/zero of=/dev/data bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.0013819 s, 3.0 MB/s
[grid@rac1 ~]$ kfed read /dev/data
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
7F03F92F5400 00000000 00000000 00000000 00000000 [................]
Repeat 255 times
KFED-00322: Invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]
SQL> alter diskgroup DATA mount;
alter diskgroup DATA mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15040: diskgroup is incomplete
3 、修复
[grid@rac1 trace]$ kfed write /dev/data text=/tmp/data.head
[grid@rac1 trace]$ kfed read /dev/data
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
......
kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
......
[grid@rac1 trace]$ sqlplus / as sysasm
SQL> alter diskgroup DATA mount;
Diskgroup altered.
二、使用 kfed 自动备份的恢复
从 10.2.0.5 、 11.1.0.7 、 11.2 之后 ASM 磁盘头会自动备份到 AU#1 的倒数第二个 block 。对于 AU size 是 1MB 的 DISKGROUP ,每个 AU 包括 block 数量 =1024KB/4KB=256 个,因此备份信息位于 AU#1 的第 254 号 block(block 从 0 号开始 ) 。
1 、模拟磁盘头损坏
dd if=/dev/zero of=/dev/data bs=4096 count=1
SQL> select group_Number,disk_number,mount_status ,header_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU
------------ ----------- ------- ------------
1 0 CACHED CANDIDATE
2 0 CACHED MEMBER
2 1 CACHED MEMBER
2 2 CACHED MEMBER
SQL> alter diskgroup DATA dismount force;
Diskgroup altered.
SQL> alter diskgroup DATA mount;
alter diskgroup DATA mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15040: diskgroup is incomplete
2 、使用自备份的修复磁盘头
[grid@rac1 trace]$ kfed repair /dev/data
[grid@rac1 trace]$ kfed read /dev/data
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
......
kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
......
kfdhdb.grpstmp.hi: 33123181 ; 0x0e4: HOUR=0xd DAYS=0x1b MNTH=0xa YEAR=0x7e5
kfdhdb.grpstmp.lo: 1764439040 ; 0x0e8: USEC=0x0 MSEC=0x2cd SECS=0x12 MINS=0x1a
SQL> alter diskgroup DATA mount;
Diskgroup altered.
SQL> select group_Number,disk_number,mount_status ,header_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU
------------ ----------- ------- ------------
1 0 CACHED MEMBER
2 0 CACHED MEMBER
2 1 CACHED MEMBER
2 2 CACHED MEMBER
SQL> select name,path,STATE,MODE_STATUS from v$asm_disk;
NAME PATH STATE MODE_ST
------------------------------ ---------------------------------------- -------- -------
DATA_0000 /dev/data NORMAL ONLINE
OCR_0000 /dev/ocrvote1 NORMAL ONLINE
OCR_0001 /dev/ocrvote2 NORMAL ONLINE
OCR_0002 /dev/ocrvote3 NORMAL ONLINE
三、使用 dd 备份恢复
1 、 dd 备份磁盘头信息
[grid@rac1 trace]$ dd if=/dev/data of=/tmp/data2.bak bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000103484 s, 39.6 MB/s
2 、模拟破坏
[grid@rac1 trace]$ dd if=/dev/zero of=/dev/data bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.00127311 s, 3.2 MB/s
3 、检查磁盘和磁盘组状态
SQL> select name,path,STATE,MODE_STATUS from v$asm_disk;
NAME PATH STATE MODE_ST
------------------------------ ---------------------------------------- -------- -------
DATA_0000 /dev/data NORMAL ONLINE
OCR_0000 /dev/ocrvote1 NORMAL ONLINE
OCR_0001 /dev/ocrvote2 NORMAL ONLINE
OCR_0002 /dev/ocrvote3 NORMAL ONLINE
SQL> select group_Number,disk_number,mount_status ,header_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU
------------ ----------- ------- ------------
1 0 CACHED CANDIDATE
2 0 CACHED MEMBER
2 1 CACHED MEMBER
2 2 CACHED MEMBER
SQL> alter diskgroup DATA dismount force;
Diskgroup altered.
SQL> select group_Number,disk_number,mount_status ,header_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU
------------ ----------- ------- ------------
0 0 CLOSED CANDIDATE
2 0 CACHED MEMBER
2 1 CACHED MEMBER
2 2 CACHED MEMBER
SQL> alter diskgroup DATA mount;
alter diskgroup DATA mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15040: diskgroup is incomplete
4 、使用 dd 备份恢复
[grid@rac1 trace]$ dd if=/tmp/data2.bak of=/dev/data
8+0 records in
8+0 records out
4096 bytes (4.1 kB) copied, 0.00125491 s, 3.3 MB/s
SQL> select group_Number,disk_number,mount_status ,header_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU
------------ ----------- ------- ------------
1 0 CACHED MEMBER
2 0 CACHED MEMBER
2 1 CACHED MEMBER
2 2 CACHED MEMBER
