OLR损坏后节点无法引导,必须从备份还原而非重建;确认方法是先检查ohasd进程是否运行,再验证olr.loc路径有效性,最后用ocrconfig -restore命令执行原子还原并同步olr.loc文件。
olr损坏后节点无法引导,必须从备份还原,不能重建或跳过——因为olr不是配置文件,而是本地启动时唯一可信的集群元数据源。
确认OLR是否真损坏,别把ohasd没启当成OLR问题
执行 crsctl check crs 报 CRS-4537 时,先别急着还原OLR。90%的情况是 ohasd 进程根本没起来,而非OLR损坏。
- 立刻运行
ps -ef | grep ohasd:若无输出,说明进程未启动,此时应检查/etc/oracle/olr.loc文件是否存在、路径是否可读、权限是否为644 -
cat /etc/oracle/olr.loc必须返回有效路径,例如olrconfig_loc=/u01/app/19c/grid/cdata/olr.ocr;若路径指向空目录、不存在的ASM磁盘组或NFS挂载点未就绪,ohasd会静默失败 - 只有当
ohasd确实运行(crsctl check crs显示CRS-4638),但crsctl stat res -t中所有资源仍为OFFLINE或UNKNOWN,且$GRID_HOME/log/<hostname>/client/ocrcheck.log出现ORA-15077: cannot locate ASM instance serving OCR类错误,才需怀疑OLR本体损坏
从备份还原olr文件的三步实操顺序
OLR备份默认存在 $GRID_HOME/cdata/<hostname>.olr,由Oracle自动轮转(保留最近3份)。还原不是覆盖拷贝,而是一套带校验的原子操作。
- 停止本地ohasd:
sudo $GRID_HOME/bin/crsctl stop ohasd -f—— 必须加-f,否则可能 hang 在等待子进程退出 - 用
ocrconfig命令还原:sudo $GRID_HOME/bin/ocrconfig -restore $GRID_HOME/cdata/<hostname>.olr—— 注意路径必须完整,不能用相对路径;命令成功后无输出,不报错即表示通过 - 重启ohasd并验证:
sudo $GRID_HOME/bin/crsctl start ohasd,然后立即执行crsctl check crs;若返回CRS-4638且crsctl stat res -t开始显示资源状态(哪怕仍是INTERMEDIATE),说明OLR已生效
还原后ora.asm卡在OFFLINE?检查ASM密码文件与监听依赖
OLR还原成功只是起点。常见现象是 crsctl stat res -t 显示 ora.asm 长期 OFFLINE,日志里反复出现 ORA-01017: invalid username/password 或 CRS-5055: unable to connect to an ASM instance。
- 根本原因不是OLR,而是ASM实例启动时需读取密码文件
orapw+ASM,而该文件在节点重装或手动清理时极易丢失或权限错乱;检查路径$GRID_HOME/dbs/orapw+ASM是否存在,属主是否为grid:oinstall,权限是否为600 - 另一个隐藏依赖是
ora.ASMNET1LSNR_ASM.lsnr:它不依赖数据库监听,专为ASM通信设计;若该资源未就绪,ora.asm会因连接超时直接放弃启动;执行crsctl start res ora.ASMNET1LSNR_ASM.lsnr -init -f强制拉起 - 不要试图用
sqlplus / as sysasm手动启ASM实例来绕过CRS——这会导致资源状态与CRS注册不一致,后续crsctl start crs可能拒绝接管
没有olr备份怎么办?别用oradim重建
若 $GRID_HOME/cdata/<hostname>.olr 为空或被删,oradim -new 创建的不是OLR,而是Windows风格的Windows服务注册表项,在Linux RAC中完全无效,强行执行只会污染 /etc/oracle/olr.loc 并导致后续 crsctl 命令全部失效。
- 唯一可行路径是:从其他正常节点导出OLR内容,再导入到故障节点。使用
ocrdump -local -backupfile /tmp/olr_backup.txt(注意加-local)在正常节点生成文本快照 - 将该文件复制到故障节点,用
ocrconfig -local -import /tmp/olr_backup.txt导入;此操作要求故障节点已能运行ohasd(即/etc/oracle/olr.loc已修复),否则命令会报OCR not available - 最易被忽略的一点:导入后必须手动同步
/etc/oracle/olr.loc内容——ocrconfig -import不会更新该文件,你得自己echo "olrconfig_loc=/u01/app/19c/grid/cdata/olr.ocr" > /etc/oracle/olr.loc并chmod 644

















