1. 问题现象与背景分析上周在客户现场遇到一个典型的Flex ASM环境故障Oracle Grid InfrastructureGI集群无法正常启动检查发现crsd进程未能成功拉起。这种故障在11g/12c的Flex ASM架构中并不罕见但排查过程往往让DBA们头疼。具体表现为CRS-4639: Could not contact Oracle High Availability Services CRS-4000: Command Start failed, or completed with errorsFlex ASM是Oracle 12c引入的新架构与传统ASM相比最大的区别在于解耦了ASM实例与数据库节点的绑定关系。这种架构下ASM实例可以运行在集群中的任意节点上而crsd作为集群资源服务守护进程其启动失败会直接导致整个GI堆栈无法正常工作。2. 故障排查步骤实录2.1 初始诊断三板斧首先执行标准检查流程# 检查集群状态 crsctl check cluster -all # 查看crsd日志 tail -500f $GRID_HOME/log/hostname/crsd/crsd.log # 检查OHASD状态 crsctl check has日志中关键报错如下[ohasd(27795)]CRS-2765:Resource ora.crsd has failed on server node1. [cssd(12351)]CRS-1713:CSSD daemon is started in exclusive mode2.2 深度分析工具使用使用Oracle提供的专用诊断工具进一步定位# 收集集群诊断信息 crsctl diagcollect -collect crs # 检查SCAN配置 srvctl config scan srvctl config scan_listener # 验证网络配置 oifcfg getif发现一个关键线索Flex ASM的监听器资源未能正确注册到集群中。这解释了为什么crsd在尝试管理ASM资源时卡死。3. 根本原因定位3.1 Flex ASM架构特性分析与传统ASM不同Flex ASM架构中ASM实例数量可以少于数据库节点数通常3个足够客户端连接通过SCAN监听器负载均衡ASM磁盘组需要配置CLIENT_COMPATIBILITY参数本次故障的根本原因是节点扩容后未正确更新ASM_DISKSTRING参数导致ASM实例无法识别新增的磁盘路径进而造成监听器注册失败最终触发crsd启动超时3.2 配置错误验证通过以下命令确认配置问题-- 检查ASM参数 SQL show parameter asm_diskstring -- 查看磁盘组兼容性 SQL select name, compatibility, database_compatibility from v$asm_diskgroup;结果显示asm_diskstring仍指向旧的磁盘路径而新增的NVMe磁盘未被包含。4. 解决方案实施4.1 分步修复流程首先停止所有相关资源crsctl stop res ora.asm -f crsctl stop has -f修正ASM磁盘路径ALTER SYSTEM SET asm_diskstring/dev/oracleasm/disks/*,/dev/nvme* SCOPESPFILE;更新磁盘组兼容性仅限Flex ASMALTER DISKGROUP DATA SET ATTRIBUTE client_compatibility12.2;重新初始化集群栈crsctl start has crsctl start crs4.2 关键参数验证修复后必须检查# 确认所有节点ASM实例正常 srvctl status asm -detail # 验证监听器注册 lsnrctl status LISTENER_SCAN1 # 检查资源状态 crsctl stat res -t5. 预防措施与最佳实践5.1 Flex ASM环境配置规范磁盘路径配置建议-- 多路径环境下示例 ASM_DISKSTRING/dev/mapper/*asm*,/dev/oracleasm/*兼容性设置原则磁盘组COMPATIBILITY 12.2CLIENT_COMPATIBILITY 数据库版本5.2 变更管理要点在Flex ASM环境中进行以下操作时需特别注意存储扩容或路径变更集群节点增减GI补丁应用网络配置调整建议操作流程预先检查asm_diskstring覆盖范围临时禁用集群自动启动执行变更后先单节点测试最后全集群滚动实施6. 深度问题排查技巧6.1 日志分析要点当遇到crsd启动问题时应按顺序检查$GRID_HOME/log/hostname/agent/ohasd/oraagent_oracle/oraagent_oracle.log$GRID_HOME/log/hostname/agent/ohasd/orarootagent_root/orarootagent_root.log$GRID_HOME/log/hostname/crsd/crsd.log重点关注时间戳衔接处通常第一个报错才是真实原因。6.2 常见错误代码速查错误代码可能原因解决方案CRS-2765资源依赖失败检查前置资源(ASM/监听)状态CRS-4639进程通信失败验证网络/SCAN配置CRS-4000通用启动失败查看对应资源日志CRS-2674启动超时调整启动超时参数7. 高级恢复手段当标准流程无法解决时可以尝试7.1 手动清理资源状态crsctl delete res ora.asm -f crsctl delete res ora.LISTENER_SCAN1.lsnr -f7.2 重建OCR备份crsctl replace ocr -force /path/to/backup7.3 使用root.sh修复cd $GRID_HOME ./perl/bin/perl -I$GRID_HOME/perl/lib $GRID_HOME/crs/install/rootcrs.pl -deconfig -force ./root.sh重要提示这些操作会导致服务中断务必在维护窗口期进行并提前备份OCR和VF
Oracle Flex ASM架构下CRSD启动故障排查与修复
1. 问题现象与背景分析上周在客户现场遇到一个典型的Flex ASM环境故障Oracle Grid InfrastructureGI集群无法正常启动检查发现crsd进程未能成功拉起。这种故障在11g/12c的Flex ASM架构中并不罕见但排查过程往往让DBA们头疼。具体表现为CRS-4639: Could not contact Oracle High Availability Services CRS-4000: Command Start failed, or completed with errorsFlex ASM是Oracle 12c引入的新架构与传统ASM相比最大的区别在于解耦了ASM实例与数据库节点的绑定关系。这种架构下ASM实例可以运行在集群中的任意节点上而crsd作为集群资源服务守护进程其启动失败会直接导致整个GI堆栈无法正常工作。2. 故障排查步骤实录2.1 初始诊断三板斧首先执行标准检查流程# 检查集群状态 crsctl check cluster -all # 查看crsd日志 tail -500f $GRID_HOME/log/hostname/crsd/crsd.log # 检查OHASD状态 crsctl check has日志中关键报错如下[ohasd(27795)]CRS-2765:Resource ora.crsd has failed on server node1. [cssd(12351)]CRS-1713:CSSD daemon is started in exclusive mode2.2 深度分析工具使用使用Oracle提供的专用诊断工具进一步定位# 收集集群诊断信息 crsctl diagcollect -collect crs # 检查SCAN配置 srvctl config scan srvctl config scan_listener # 验证网络配置 oifcfg getif发现一个关键线索Flex ASM的监听器资源未能正确注册到集群中。这解释了为什么crsd在尝试管理ASM资源时卡死。3. 根本原因定位3.1 Flex ASM架构特性分析与传统ASM不同Flex ASM架构中ASM实例数量可以少于数据库节点数通常3个足够客户端连接通过SCAN监听器负载均衡ASM磁盘组需要配置CLIENT_COMPATIBILITY参数本次故障的根本原因是节点扩容后未正确更新ASM_DISKSTRING参数导致ASM实例无法识别新增的磁盘路径进而造成监听器注册失败最终触发crsd启动超时3.2 配置错误验证通过以下命令确认配置问题-- 检查ASM参数 SQL show parameter asm_diskstring -- 查看磁盘组兼容性 SQL select name, compatibility, database_compatibility from v$asm_diskgroup;结果显示asm_diskstring仍指向旧的磁盘路径而新增的NVMe磁盘未被包含。4. 解决方案实施4.1 分步修复流程首先停止所有相关资源crsctl stop res ora.asm -f crsctl stop has -f修正ASM磁盘路径ALTER SYSTEM SET asm_diskstring/dev/oracleasm/disks/*,/dev/nvme* SCOPESPFILE;更新磁盘组兼容性仅限Flex ASMALTER DISKGROUP DATA SET ATTRIBUTE client_compatibility12.2;重新初始化集群栈crsctl start has crsctl start crs4.2 关键参数验证修复后必须检查# 确认所有节点ASM实例正常 srvctl status asm -detail # 验证监听器注册 lsnrctl status LISTENER_SCAN1 # 检查资源状态 crsctl stat res -t5. 预防措施与最佳实践5.1 Flex ASM环境配置规范磁盘路径配置建议-- 多路径环境下示例 ASM_DISKSTRING/dev/mapper/*asm*,/dev/oracleasm/*兼容性设置原则磁盘组COMPATIBILITY 12.2CLIENT_COMPATIBILITY 数据库版本5.2 变更管理要点在Flex ASM环境中进行以下操作时需特别注意存储扩容或路径变更集群节点增减GI补丁应用网络配置调整建议操作流程预先检查asm_diskstring覆盖范围临时禁用集群自动启动执行变更后先单节点测试最后全集群滚动实施6. 深度问题排查技巧6.1 日志分析要点当遇到crsd启动问题时应按顺序检查$GRID_HOME/log/hostname/agent/ohasd/oraagent_oracle/oraagent_oracle.log$GRID_HOME/log/hostname/agent/ohasd/orarootagent_root/orarootagent_root.log$GRID_HOME/log/hostname/crsd/crsd.log重点关注时间戳衔接处通常第一个报错才是真实原因。6.2 常见错误代码速查错误代码可能原因解决方案CRS-2765资源依赖失败检查前置资源(ASM/监听)状态CRS-4639进程通信失败验证网络/SCAN配置CRS-4000通用启动失败查看对应资源日志CRS-2674启动超时调整启动超时参数7. 高级恢复手段当标准流程无法解决时可以尝试7.1 手动清理资源状态crsctl delete res ora.asm -f crsctl delete res ora.LISTENER_SCAN1.lsnr -f7.2 重建OCR备份crsctl replace ocr -force /path/to/backup7.3 使用root.sh修复cd $GRID_HOME ./perl/bin/perl -I$GRID_HOME/perl/lib $GRID_HOME/crs/install/rootcrs.pl -deconfig -force ./root.sh重要提示这些操作会导致服务中断务必在维护窗口期进行并提前备份OCR和VF