环境:Oracle11.2.4.0RAC
问题描述:
数据库IO读写卡顿,随之某一节点的asm磁盘组被强制dismount,实例被迫停止。
问题分析:
通过系统日志分析,发现有Buffer I/O error的故障刷屏,如下图:
用multipath -ll查看服务器磁盘多路径,发现某一节点两块磁盘路径分别丢失了两条(正常情况为四条路径,一条为active状态,其他三条为enabled状态):
重新刷新路径,发现磁盘路径出错,从而导致两块磁盘所在的ASM磁盘组DATA2处于dismount状态的,因此造成该节点实例停止运行。
问题解决:
1、通过存储重新挂载新的两块磁盘,用multipath -ll 确认新加的两块磁盘路径在两个节点中都正常,如下图:
(以下操作皆在grid用户下执行!“su - grid” 进入grid用户)
2、在正常节点中,进入ASM磁盘组管理界面,把新加的两块盘添加到磁盘组DATA2中,等待磁盘组数据自动平衡,如下图:
(在grid用户下,执行命令"sqlplus / as sysasm"连接进入asm,再执行以下命令!)
当显示”REBAL RUN”状态说明数据正在自动平衡到新加的磁盘,数据同步过程需要一段时间。
数据同步过程如下:
DATA2_0000、DATA2_0001 是旧的路径出错的两块盘,DATA2_0002、DATA2_0003 是新加的正常的两块盘。
同步完成,再查看状态,当显示“no rows selected”状态表示数据已经平衡完毕。如下:
3、开始删除旧的路径损坏的两个磁盘DATA2_0000,DATA2_0001,并等待数据自动同步到新加的两块磁盘DATA2_0002,DATA2_0003中,如下图:
在旧的两块盘被踢除之前,asm机制会把这两块盘上的数据自动迁移到两块新的盘中,当显示”REBAL RUN”状态说明数据正在自动平衡,数据同步过程需要一段时间,过程如下:
当DATA2磁盘组中只显示两块新的盘的时候,还有asm_operation查看结果处于“no rows selected”状态时,说明旧的两块盘已经被成功踢除!
3、再到不正常的节点中,用 " alter diskgroupDATA2 mount; " 命令挂载DATA2磁盘组,挂载成功,日志如下:
4、分别在两个节点中进入asmcmd,用“lsdg”命令查看磁盘组情况,状态正常,如下:
5、在不正常节点中,启动实例,启动成功,问题解决!