OCR故障恢复核心是ocrconfig -restore命令,需先确认损坏类型、验证备份有效性、在独占模式下执行还原,并同步更新votedisk与ASM SPFILE。
ocrconfig是 OCR 故障恢复的核心命令,但它本身不直接“修复损坏磁盘”,而是从已有备份还原 OCR 内容到可用位置。OCR 磁盘损坏后能否恢复,取决于两点:备份是否存在、ASM 磁盘组是否还能挂载(或能否重建)。以下是实操中必须盯住的关键环节。
确认 OCR 当前状态和损坏程度
先别急着跑ocrconfig -restore,得先判断是“逻辑损坏”还是“物理不可访问”。常见误判是看到ocrcheck报错就认定 ocr 损坏,其实可能是 asm 磁盘组没起来、权限不对、或 ocr 文件路径被误删。
ocrcheck返回Device/File integrity check failed或直接报 I/O 错误,才指向物理层问题- 如果
ocrcheck显示Device/File not configured但 ASM 磁盘组仍在线(asmcmd lsdg可见),说明 OCR 路径丢失,不是磁盘损坏 - 检查 ASM 日志:
tail -20 $ORACLE_BASE/diag/asm/+asm/+ASM*/trace/alert_+ASM*.log,搜索OCR、corruption、I/O error - 运行
crsctl query css votedisk,若同时报错,大概率是底层 ASM 磁盘组异常,需优先处理磁盘组
用ocrconfig -showbackup验证备份有效性
OCR 自动备份默认每 4 小时一次,存于$GRID_HOME/cdata/<cluster_name>/下,但备份文件可能已过期、权限错误或被清理。不能只看列表存在就认为能用。
- 执行
ocrconfig -showbackup,确认最近一份备份时间早于 OCR 损坏发生时间(比如损坏发生在 5 月 5 日 14:00,那 5 月 5 日 12:00 的备份才可用) - 检查备份文件权限:
ls -l /u01/app/12.1.0/grid/cdata/rac-cluster/backup_20260505_120000.ocr,必须属主为grid,且可读 - 手动校验备份完整性(高风险操作前必做):
ocrconfig -verify -f /path/to/backup.ocr,返回OCR backup file is valid才算真正可用 - 注意:
-local参数生成的是 OLR(Oracle Local Registry)备份,不能用于集群级 OCR 恢复;必须用无-local的全局备份
在独占模式下执行ocrconfig -restore
OCR 恢复必须在所有节点停止 Clusterware 后,由单节点以独占(-excl)且无 CRS(-nocrs)方式启动,否则命令会静默失败或写入乱序数据。
- 停集群:
crsctl stop crs -f(每个节点都执行) - 首节点启动独占模式:
crsctl start crs -excl -nocrs—— 此时仅启动 CSS 和 ASM,不启动任何资源 - 确认 ASM 实例已 up:
sqlplus / as sysasm→select status from v$instance;应为MOUNTED或OPEN - 执行恢复:
ocrconfig -restore /u01/app/12.1.0/grid/cdata/rac-cluster/backup_20260505_120000.ocr - 验证:
ocrcheck必须显示Status of Oracle Cluster Registry is as follows且Device/File integrity check succeeded
OCR 恢复后必须同步更新 votedisk 和 ASM SPFILE
OCR 不是孤立组件。它记录了 votedisk 位置和 ASM SPFILE 路径。如果只恢复 OCR,而 votedisk 所在磁盘组已损坏或 SPFILE 路径失效,集群仍无法启动。
- 恢复 votedisk 前先确认其当前位置:
crsctl query css votedisk,若输出为空或报错,需用crsctl replace votedisk +DG_SYS指向一个健康的 ASM 磁盘组 - 检查 ASM SPFILE 是否还在原位置:
sqlplus / as sysasm→show parameter spfile;若路径无效,需用create pfile='/tmp/init.ora' from spfile;生成 PFILE,再重建 SPFILE 到新磁盘组 - 最后重启集群:
crsctl stop crs→crsctl start crs(全节点顺序执行) - 切记:恢复完成后立即手工触发一次备份:
ocrconfig -manualbackup,避免下次故障时又依赖旧备份
OCR 恢复最易被忽略的点是“ASM 磁盘组状态”和“votedisk/SPFILE 路径一致性”。很多 DBA 成功运行了ocrconfig -restore,却卡在crsctl start crs卡住或节点反复驱逐——问题往往不在 OCR 本身,而在它所依赖的底层存储元数据没有同步更新。