一、故障现象
无法连接rac数据库,客户端连接提示无监听程序,进入主机查看集群状态crsctl stat res –t命令无法使用,提示
CRS-4535: Cannot communicate with ClusterReady Services
CRS-4000: Command Status failed, orcompleted with errors.
两个节点都提示这个错误
二、解决过程
查看上边的报错,基本可以判断是oracle的集群服务出现了问题
1、 查看alert日志
发现两个节点的日志都提示有与磁盘的同步I/O操作失败,初步判断是asm磁盘问题
alert_ehr1.log
alert_ehr2.log
2、查看asm日志
发现两个节点中都提示有arch_dg磁盘组被强制dismount了,arch_dg磁盘组放置了归档日志,flashback空间(存储了控制文件,在线日志的镜像),没有了共享磁盘,导致数据库异常
alert_+ASM1.log
alert_+ASM2.log
alertwsptrac1.log
alertwsptrac2.log
3、处理问题
磁盘组dismount了,那就手工mount
使用grid用户登录系统
sqlplus / as sysasm
select name, state, total_mb, free_mb fromv$asm_diskgroup;
都是dismount状态的
手工mount
alter diskgroup xxx mount;
select name, state, total_mb, free_mb fromv$asm_diskgroup;
磁盘组状态都是mount的了,然后重启crs
使用root用户
crsctl start crs
无法启动此命令,使用如下命令
crsctl start res ora.crsd -init
提示已经在节点上启动成功,但是使用crsctl stat res –t命令还是提示
CRS-4535: Cannot communicate with ClusterReady Services
CRS-4000: Command Status failed, orcompleted with errors
尝试关闭crs,重新启动
crsctl stop crs
crsctl start res ora.crsd -init
关闭正常,启动正常,但是使用crsctl stat res –t命令还是提示上边问题,尝试强制停止,重新启动
crsctl stop crs –f
crsctl start res ora.crsd -init
还是提示上边问题,重新整理思路,重新过一遍看还是否有遗漏的地方,检查是否是asm磁盘组没有mount好,造成的crs无法启动,然后查看资源状态
crsctl stat res –t –init
可以查看所有资源除了ora.crsd状态是offline的,其他都是online的,判断crs还有其他问题
4、检查crs的日志
检查crs的日志发现如下提示,检查ocr信息
ocrcheck
发现检查失败,至此原因清楚了,是crs信息异常,造成了crs启动异常
crsd.log
5、恢复crs
在2节点的grid的$ORACLE_HOME/cdata/目录下边,找到最新一次的备份进行还原
ocrconfig –restore
还原后重启crs,启动正常,数据库恢复正常
三、总结
1.备份重于一切
2.OCR记录的是节点成员的配置信息,如数据库、ASM、实例、监听器、VIP等CRS资源的配置信息。CRS进程管理的信息来自OCR的内容。Oracle自动4个小时,1天,1周备份
3.造成arch_dg磁盘组dismount的原因还在查找,初步怀疑是磁盘空间不足造成了问题,这个库前一天归档日志满了,arch_dg磁盘组还剩1G大小,手工删除了归档日志,可用容增加到300G
4.手工删除归档日志
grid用户登录系统,使用asmcmd工具管理磁盘
asmcmd
lsdg
cd到归档日志目录
rm –rf 日志
使用rman验证一下归档日志是否可用,否则rman备份有可能无法正常备份
rman target /
crosscheck archivelog all
list expired archivelog all
领取专属 10元无门槛券
私享最新 技术干货