OCR备份文件必须人工验证三要素:时间早于损坏发生、属主权限为grid:oinstall且600、ocrconfig -verify输出“valid”;缺一不可,否则restore将静默失败或写乱集群。

ocrconfig -showbackup 显示文件但还原失败,先别急着重试
看到 ocrconfig -showbackup 列出备份文件,不代表它能用。这个命令只查路径是否存在、文件名是否符合命名规则,不校验内容有效性。很多 DBA 在 OCR 损坏后直接执行 ocrconfig -restore,结果静默失败或写入乱数据,导致集群无法启动——问题往往出在备份本身已失效。
验证备份文件是否真正可用的三个硬性条件
必须人工确认以下三点,缺一不可:
- 备份时间早于 OCR 损坏发生时间:比如损坏发生在
2026-08-27 02:15,那backup_20260826_200000.ocr可用,而day.ocr或week.ocr这类模糊命名的备份几乎不可靠 - 属主和权限正确:
ls -l /u01/app/19.0.0/grid/cdata/rac-cluster/backup_20260826_200000.ocr必须返回-rw------- 1 grid oinstall;若属主是root或权限为644,ocrconfig -restore会报PROT-1: Failed to open file - 手动校验完整性:
ocrconfig -verify -f /path/to/backup.ocr,只有输出OCR backup file is valid才算过关;改过后缀、解压过、用cp复制而非ocrconfig -manualbackup生成的文件,都会在这里失败
备份失败的常见原因与对应操作
不是所有“备份失败”都指命令报错,更多是备份动作没真正完成:
-
ocrconfig -manualbackup在非 Master Node 上执行:该命令只能由当前 Master Node 的 CRSD 进程触发,其他节点执行会静默忽略,且不报错;查crsctl query crs activeversion -f和日志确认谁是 Master - 备份目录空间不足或被挂载为只读:
df -h $ORACLE_HOME/crs/cdata/<cluster_name>查剩余空间;mount | grep $(dirname $ORACLE_HOME)确认挂载选项不含ro - 自动备份被禁用但未察觉:检查
ocrconfig -showbackupauto是否返回空;若为空,说明自动备份机制已停,需立即用ocrconfig -backuploc重设路径并手工触发一次-manualbackup - ASM 磁盘组异常导致备份写入中断:即使
asmcmd lsdg显示磁盘组 MOUNTED,也可能因 I/O 延迟或路径抖动造成备份文件写半截;查$ORACLE_BASE/diag/asm/+asm/+ASM*/trace/alert_+ASM*.log中最近 2 小时的OCR、corruption、I/O error关键词
没有可用备份时的底线操作
当确认所有备份均无效,又不能接受长时间停机,只能走极端路径:
- 先导出当前 OCR 内容(如果还能读):
ocrconfig -export /tmp/ocr_last_known.exp;哪怕只导出部分,也比完全重建强 - 用
ocrconfig -overwrite强制重建 OCR,但注意:这会清空所有自定义资源(数据库实例、监听器、VIP 等),必须提前用crsctl stat res -p > /tmp/res_conf.txt备份资源配置 - 重建后逐个添加资源:
crsctl add resource+crsctl modify resource,参数必须严格匹配导出文件中的NAME、TYPE、ACL、REQUIRED_RESOURCES字段,漏一项就可能无法启动 - 特别注意 Voting Disk 同步:若
crsctl query css votedisk报错,需在 OCR 恢复后立刻执行crsctl replace votedisk +NEW_DG,否则节点可能再次驱逐
OCR 没有“修复”概念,只有还原或重建;而重建后的元数据一致性,全靠你导出时是否抓准了那个精确的时间点和完整字段集——这点最容易被忽略,也最难补救。


















