Oracle 11g RAC集群运维:手把手教你用crsctl命令诊断CRS健康状态(附常见错误排查)

张开发
2026/4/19 7:58:45 15 分钟阅读

分享文章

Oracle 11g RAC集群运维:手把手教你用crsctl命令诊断CRS健康状态(附常见错误排查)
Oracle 11g RAC集群健康诊断实战crsctl命令深度解析与故障排查指南凌晨三点值班手机突然响起刺耳的警报声——某核心业务系统的Oracle RAC集群出现节点异常。作为DBA这种场景往往意味着一个不眠之夜。但真正资深的运维专家都清楚慌乱解决不了问题关键在于能否快速定位CRSCluster Ready Services的健康状态。本文将带你掌握crsctl命令的诊断艺术像老中医望闻问切一样从命令输出中捕捉集群的异常信号。1. CRS健康检查基础从常规体检开始1.1 集群状态快速扫描当接到集群异常报警时我通常会先做一次全面体检。crsctl check crs就是最基础却最重要的听诊器$ crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4535: Cannot communicate with Cluster Ready Services CRS-4529: Cluster Synchronization Services is online CRS-4534: Cannot communicate with Event Manager这个输出已经暴露出严重问题——CRS和Event Manager通信异常。但资深DBA不会止步于此我们需要进一步验证$ crsctl check cluster -all ************************************************************** rac1: CRS-4535: Cannot communicate with Cluster Ready Services CRS-4530: Communications failure contacting Cluster Synchronization Services daemon CRS-4534: Cannot communicate with Event Manager ************************************************************** rac2: CRS-4638: Oracle High Availability Services is online CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online通过跨节点检查我们立即发现rac1节点存在集群通信故障而rac2节点完全正常。这种对比诊断能快速缩小问题范围。1.2 关键组件状态查询CRS由多个核心组件构成了解它们的协作关系对诊断至关重要组件名称守护进程功能描述关键状态码OHASohasd高可用服务主进程CRS-4638CRSDcrsd集群就绪服务CRS-4537CSSDcssd集群同步服务CRS-4529EVMDevmd事件管理服务CRS-4533查询详细版本信息也很重要不同版本的诊断方法可能有差异$ crsctl query crs activeversion Oracle Clusterware active version on the cluster is [11.2.0.4.0] $ crsctl query crs softwareversion rac1 Oracle Clusterware version on node [rac1] is [11.2.0.4.0]2. 深度诊断解读CRS状态码的玄机2.1 常见错误状态解析CRS的错误代码看似晦涩实则各有特定含义。以下是实战中积累的状态码速查表CRS-4535: CRS服务通信中断可能原因网络隔离、crsd进程崩溃、OCR损坏排查命令crsctl stat res ora.crsd -tCRS-4638: OHAS服务运行正常健康状态标志但需结合其他服务状态判断CRS-4529: CSSD服务在线集群同步基础正常节点心跳保持CRS-4534: EVMD服务失联影响事件通知但通常不影响基础集群功能2.2 典型故障场景处理场景一节点间网络闪断$ crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4535: Cannot communicate with Cluster Ready Services CRS-4529: Cluster Synchronization Services is online CRS-4534: Cannot communicate with Event Manager处理步骤检查私网互联状态$ oifcfg getif eth0 192.168.1.0 global public eth1 10.10.10.0 global cluster_interconnect验证私网通信$ ping -c 3 10.10.10.2必要时重启网络组件$ crsctl stop res ora.cluster_interconnect.haip -f $ crsctl start res ora.cluster_interconnect.haip场景二OCR磁盘损坏$ crsctl query css votedisk ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 4a4f5f4f525f444b (VALID) /dev/asmdisk1 [OCR_DG] CRS-10001: Unable to read voting disk header急救方案使用备份OCR恢复$ ocrconfig -restore /u01/backup/ocrbackup_20230801.ocr若无备份尝试导出重建$ ocrconfig -export /tmp/ocr.exp -s online $ ocrconfig -import /tmp/ocr.exp3. 高级诊断技巧日志分析与组件控制3.1 日志定位黄金法则CRS各组件的日志位置及关键信息OHASD日志$ tail -100 $GRID_HOME/log/hostname/ohasd/ohasd.log关注资源启动顺序、依赖关系错误CRSD日志$ tail -200 $GRID_HOME/log/hostname/crsd/crsd.log关键搜索词CRS-1006、CRS-0215CSSD日志$ grep -i error $GRID_HOME/log/hostname/cssd/ocssd.log心跳超时通常显示clssnmPollingThread错误3.2 服务控制实战安全停止CRS集群预检查资源状态$ crsctl stat res -t按顺序停止服务$ crsctl stop crs -f验证停止结果$ ps -ef | grep crs分级启动技巧$ crsctl start crs -excl -nocrs # 仅启动OHAS $ crsctl start res ora.crsd -init # 手动启动CRS4. 预防性维护构建健康检查体系4.1 自动化监控脚本以下是我在生产环境使用的检查脚本核心片段#!/bin/bash CRS_STATUS$(crsctl check crs | grep -c online) if [ $CRS_STATUS -lt 4 ]; then echo CRITICAL: CRS components offline | mail -s RAC Alert dba-teamexample.com crsctl stat res -t /tmp/crs_status_$(date %Y%m%d).log fi4.2 关键健康指标建议定期检查的指标清单表决磁盘健康度$ crsctl query css votediskOCR自动备份状态$ ocrconfig -showbackup集群资源依赖关系$ crsctl stat res -t -f4.3 配置最佳实践经过多年实战总结的配置建议网络冗余配置$ oifcfg setif -global eth1/10.10.10.0:cluster_interconnect $ oifcfg setif -global eth2/10.10.20.0:cluster_interconnect表决磁盘多路径$ crsctl replace votedisk OCR_DGOCR镜像保护$ ocrconfig -replace ocrmirror /dev/asmdisk2记得第一次处理CRS-4535错误时我花了整整八小时才定位到是一个网卡驱动不兼容导致的丢包问题。现在通过系统化的诊断方法同样的问题能在二十分钟内解决——这就是经验的价值。建议每次故障处理后记录详细的诊断过程逐渐形成自己的病例库。

更多文章