OCR自动备份不能直接“恢复”成可用状态,只能用ocrconfig -restore覆盖写入OCR设备,前提是备份文件真实存在、权限正确、OCR设备已就位且集群完全停止;若ocrconfig -showbackup查不到备份,通常因OCR不可读(如ASM磁盘组offline、CSS异常),而非备份丢失。

OCR自动备份不能“恢复”成可用状态,只能用 ocrconfig -restore 覆盖写入 OCR 设备——前提是备份文件真实存在、权限正确、OCR 设备已就位且集群完全停止。
为什么 ocrconfig -showbackup 查不到备份不等于备份丢了
常见错误现象是执行 ocrconfig -showbackup 后返回空或报 PROT-602: Failed to retrieve backup information。这通常不是备份被删了,而是 OCR 本身已不可读(比如 ASM 磁盘组 offline、OCR 设备路径失效、CSS 进程异常),导致连备份列表都拿不到。
- 先确认集群是否还能进 exclusive 模式:
crsctl start crs -excl -nocrs;失败则说明底层资源(如 ASM 实例)未就绪,得先修 ASM - 在疑似 Master Node 上查实际文件:
ls -l $GRID_HOME/crs/cdata/<cluster_name>/backup*.ocr,注意 backup00.ocr 是最新自动备份,时间戳应距今 4 小时内 - 若文件存在但
ocrconfig -showbackup不显示,运行ocrconfig -backuploc确认当前配置的备份根路径是否被改过(比如指向了已 drop 的 ASM 磁盘组+OLD_OCR) - 用
file <backup_file>验证文件内容:输出必须含Oracle Cluster Registry字样,否则是损坏或误拷的假文件
ocrconfig -restore 执行前必须满足的三个硬条件
缺一不可,漏掉任一个都会静默失败或报错(如 PROT-1: Failed to open file、PROT-601: Failed to initialize ocrconfig)。
- OCR 设备必须已存在且可写:如果是 ASM 磁盘组,需先
asmcmd lsdg确认+OCR已 mount 且USABLE_FILE_MB > 0;若是裸设备,得确保没被其他进程占用 - 目标 OCR 设备上不能有残留数据:若之前 OCR 磁盘组被 drop 过,需用
dd if=/dev/zero of=<device> bs=1024 count=100清头部,否则-restore会拒绝写入 - 备份文件权限和归属必须严格匹配:
chown root:root <backup.ocr>且chmod 600 <backup.ocr>;重命名、解压、改后缀(如 .tar → .ocr)都会让ocrconfig -restore拒绝识别
真正要停的不是“CRS”,而是整个集群栈的协作状态
只在单节点执行 crsctl stop crs 是不够的。OCR 恢复要求所有节点的 CRS 完全离线,且仅在一个节点以 exclusive 模式启动 CRS 栈(不启动 crsd),否则 ocrconfig -restore 会因资源争用失败。
- 所有节点执行:
crsctl stop crs -f(加-f强制终止) - 仅在一个节点执行:
crsctl start crs -excl -nocrs(-nocrs确保 crsd 不启动,避免 OCR 被二次写入) - 验证是否成功:
ps -ef | grep crsd应无输出;crsctl check cluster -all会报错,这是预期状态 - 此时再运行
ocrconfig -restore <backup_file>,它会直接把二进制镜像写入 OCR 设备,不经过任何中间解析
最容易被忽略的一点:还原后必须三重验证——ocrcheck 看状态是否为 ONLINE,ocrdump -backupfile <backup_file> 对比关键键值(如 SYSTEM.CRS.VERSION)是否与还原前一致,crsctl query css votedisk 确认 Voting Disk 位置没漂移。任意一项不通过,说明 OCR 设备或备份本身仍有隐性损坏。


















