49.Oracle-RAC磁盘头损害修复

1.RAC数据库启动报错。

sqlplus / as sysdba
startup 
--控制文件识别出错。
ORA-00205:error in identifying control file,
check alert log for more 

2.查看ASM ALERT;
--磁盘丢失。
WARNING:group 2 (ORA_DATA)has missing disks
--磁盘组不完整。
ORA-15040:diskgroup is incomplete 
WARNING:group 2 is being dismounted;
WARNING:ASMB force dismounting group 2(ORA_DATA)due to missing disk;
SUCCESS:diskgroup ORA_DATA was dismounted.

3.查看ASM磁盘是否挂载。
asmcmd lsdg 
--都是正常挂载。EXTERNAL冗余。

4.尝试重新挂载ORA_DATA磁盘组。报错磁盘组不完整。
su - grid 
sqlplus / as sysasm 
alter diskgroup ora_data mount; 
ERROR at line 1:
ORA-15032:not all alteration performed 
ORA-15017:diskgroup "ORA_DATA" cannot be mounted
ORA-15040:diskgroup is incomplete;

5.检查磁盘组的磁盘。
--检查磁盘组的3块磁盘,都存在,而且使用ASMFD 
--不存在权限问题。
asmcmd afd_lsdsk 
Label  Filtering Path 
DATA1  DISABLED  /dev/sdi 
DATA2  DISABLED  /dev/sdj 
DATA3  DISABLED  /dev/sdk 

6.检查磁盘头状态
发现 DATA1 和 DATA2 为 CANDIDATE ,
到这里基本可以判断磁盘头损坏。

group_number,path,library,header_status,MOUNT_STATUS,STATE 
0       AFD:DATA3 AFD Library-Generic member  closed NORMAL 
0       AFD:DATA2 AFD Library-Generic CANDIDATE  closed NORMAL 
0       AFD:DATA1 AFD Library-Generic CANDIDATE  closed NORMAL 

7.检查磁盘头 
--使用KFED确认,INVALID 代表不是ASM磁盘
kfed read /dev/sdi |more 
kfbh.type 0;0x002:FKBTYP_INVALID 

从版本10.2.0.5开始ASM 会对disk header做一个额外的备份。
即第二AU 的倒数第二个block中备份了一份KFBTYP_DISKHEAD。
这个ASM Disk header的作用是当真的KFBTYP_DISKHEAD被意外覆盖
或损坏时可以使用Oracle 工具 KFED使用repair选项来修复
Disk header。

计算方法:
AU中包含的备份块block num=等于[AU_SIZE/block_size]*2-2
--因为第一个块从0计数]。

可以计算结果为:

1M AU在510
2M AU在1022
4M AU在 2046  --当前是4M的AU;
8M AU在4094
16M AU在8190
32M AU在16382

--检查磁盘盘确认磁盘是否正常:备份块检查。
--1M:AU 检查磁盘头。
kfed read /dev/raw/raw5 blkn=510
--2M:AU 检查磁盘头。
kfed read /dev/raw/raw5 blkn=1022
--4M:AU 检查磁盘头。
kfed read /dev/raw/raw5 blkn=2046
--8M:AU 检查磁盘头。
kfed read /dev/raw/raw5 blkn=8190
--32M:AU 检查磁盘头。
kfed read /dev/raw/raw5 blkn=16382


7.检查磁盘头信息2
可以通过kfed 命令检查备份块信息,可以看到正常读取到了
磁盘头信息

--4M的AU 取 2046;
kfed read dev/sdi blkn=2046 | egrep 'kfbh.type|ausize|dsknum|dskname|grpname|fgname|blksize'

8.尝试恢复ASM磁盘头。
--确定损坏磁盘的备份信息:
kfed read dev/sdi blkn=2046 | egrep 'ausize|dsknum|dskname|grpname|fgname|blksize'
kfed read dev/sdj blkn=2046 | egrep 'ausize|dsknum|dskname|grpname|fgname|blksize'

--从备份数据块备份磁盘信息,多做备份还是很必要的,
--也可以使用dd 备份磁盘的前50M。
--备份磁盘头信息。
kfed read /dev/sdi blkn=2046 >sdi.diskhead
kfed read /dev/sdj blkn=2046 >sdj.diskhead


--恢复和检查asm 磁盘头信息,恢复时需要指定ausz ,
--否则非默认AU 会报错:
--4M=4194304的AU;
kfed repair /dev/sdi aus=4194304
kfed read /dev/sdi | egrep 'ausize|dsknum|dskname|grpname|fgname|blksize'

kfed repair /dev/sdj aus=4194304
kfed read /dev/sdj | egrep 'ausize|dsknum|dskname|grpname|fgname|blksize'

9.在次尝试挂载磁盘组,成功挂载。
alter diskgroup ora_data mount;

10.重启集群。
--关闭数据库。
srvctl stop database -db orcl 
--停止集群:NODE1/NODE2
crsctl stop crs 
reboot 

备注:
--如果kfed repair 修复不成功,也可以尝试使用kefd merge 
--恢复之前备份的文件。
kfed merge /dev/sdi aus=4194304 sdi.diskhead
kfed merge /dev/sdj aus=4194304 sdj.diskhead

--此方法只使用于磁盘前4k 损坏,如果是整个磁盘被格式化
--并写入数据,此方法无效。还是只能使用备份恢复整个数据库。

--参考MOS 文档:

How To Restore/Repair/Fix An Overwritten (KFBTYP_INVALID) 
ASM Disk Header (First 4K) 10.2.0.5, 11.1.0.7, 11.2 
And Onwards (Doc ID 1088867.1)

##############################################
--备份恢复磁盘头。
--备份磁盘头:
kfed read /dev/raw/raw5    aunum=0 blknum=0 text=/home/oracle/raw5.txt
kfed read /dev/raw/raw6    aunum=0 blknum=0 text=/home/oracle/raw6.txt
kfed read /dev/raw/raw7    aunum=0 blknum=0 text=/home/oracle/raw7.txt
--恢复磁盘头:
kfed write /dev/raw/raw5    aunum=0 blknum=0 text=raw5.txt
kfed write /dev/raw/raw6    aunum=0 blknum=0 text=raw6.txt
kfed write /dev/raw/raw7    aunum=0 blknum=0 text=raw7.txt   


--或者:直接修复磁盘头。
kfed repair /dev/raw/raw5 
kfed repair /dev/raw/raw6  
kfed repair /dev/raw/raw7 

--检查修复后的磁盘头状态。
kfed read /dev/raw/raw5 aun=0 blkn=0|grep kfbh.type
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

--重新检查磁盘头状态。
重新查询磁盘组以及磁盘信息
col group_number format a30
col disk_number format a30 
col name format a30
col header_status format a30
col path format a30
col group_number clear
col disk_number clear
set linesize 200 pagesize 2000 

SQL>select group_number,disk_number,name,header_status,path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAMEHEADER_STATUS       PATH
------------ ----------- -----------------------------
   1       1 DATADG01_0001 MEMBER       /dev/raw/raw6
   1       0 DATADG01_0000 MEMBER       /dev/raw/raw5
   2       1 OCR_VOTE_0001 MEMBER       /dev/raw/raw2
   2       0 OCR_VOTE_0000 MEMBER       /dev/raw/raw1
   1       2 DATADG01_0002 MEMBER       /dev/raw/raw7
   2       2 OCR_VOTE_0002 MEMBER       /dev/raw/raw3
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值