首页 > 数据库 > Oracle > ASM磁盘头损坏如何修复
磁盘头信息备份恢复 / 无备份修复
一、 kfed 备份 / 恢复
1 、备份
kfed
read
/dev/data text=/tmp/data.head |
2 、模拟破坏
[grid@rac1 ~]$ dd if=/dev/zero
of
=/dev/data bs=4096
count
=11+0 records
in1+0 records
out4096 bytes (4.1 kB) copied, 0.0013819 s, 3.0 MB/s [grid@rac1 ~]$ kfed
read
/dev/datakfbh.endian: 0 ; 0x000: 0x00kfbh.hard: 0 ; 0x001: 0x00kfbh.type: 0 ; 0x002: KFBTYP_INVALIDkfbh.datfmt: 0 ; 0x003: 0x00kfbh.block.blk: 0 ; 0x004: blk=0kfbh.block.obj: 0 ; 0x008: file=0kfbh.
check
: 0 ; 0x00c: 0x00000000kfbh.fcn.base: 0 ; 0x010: 0x00000000kfbh.fcn.wrap: 0 ; 0x014: 0x00000000kfbh.spare1: 0 ; 0x018: 0x00000000kfbh.spare2: 0 ; 0x01c: 0x000000007F03F92F5400 00000000 00000000 00000000 00000000 [................]
Repeat 255 timesKFED-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 performedORA-15017: diskgroup
"DATA"
cannot be mountedORA-15040: diskgroup
is
incomplete |
3 、修复
[grid@rac1 trace]$ kfed write /dev/data text=/tmp/data.head [grid@rac1 trace]$ kfed
read
/dev/datakfbh.endian: 1 ; 0x000: 0x01kfbh.hard: 130 ; 0x001: 0x82kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD......kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNALkfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER...... [grid@rac1 trace]$ sqlplus /
as
sysasmSQL>
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 performedORA-15017: diskgroup
"DATA"
cannot be mountedORA-15040: diskgroup
is
incomplete |
2 、使用自备份的修复磁盘头
[grid@rac1 trace]$ kfed repair /dev/data [grid@rac1 trace]$ kfed
read
/dev/datakfbh.endian: 1 ; 0x000: 0x01kfbh.hard: 130 ; 0x001: 0x82kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD......kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNALkfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER......kfdhdb.grpstmp.hi: 33123181 ; 0x0e4:
HOUR
=0xd DAYS=0x1b MNTH=0xa
YEAR
=0x7e5kfdhdb.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 ONLINEOCR_0000 /dev/ocrvote1 NORMAL ONLINEOCR_0001 /dev/ocrvote2 NORMAL ONLINEOCR_0002 /dev/ocrvote3 NORMAL ONLINE |
三、使用 dd 备份恢复
1 、 dd 备份磁盘头信息
[grid@rac1 trace]$ dd if=/dev/data
of
=/tmp/data2.bak bs=4096
count
=11+0 records
in1+0 records
out4096 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
=11+0 records
in1+0 records
out4096 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 ONLINEOCR_0000 /dev/ocrvote1 NORMAL ONLINEOCR_0001 /dev/ocrvote2 NORMAL ONLINEOCR_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 performedORA-15017: diskgroup
"DATA"
cannot be mountedORA-15040: diskgroup
is
incomplete |
4 、使用dd 备份恢复
[grid@rac1 trace]$ dd if=/tmp/data2.bak
of
=/dev/data8+0 records
in8+0 records
out4096 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
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3091832/ ,如需转载,请注明出处,否则将追究法律责任。