ocr损坏时“integrity check failed”表明物理层故障,须停集群、验证备份有效性(时间/权限/版本)、独占模式restore,再校验ocr健康并同步更新表决磁盘路径。

ocrcheck报“integrity check failed”说明真坏了,别碰ocrconfig -export
OCR不是配置文件,是带校验块和元数据结构的二进制镜像。一旦ocrcheck输出Device/File integrity check failed或直接报I/O错误,基本可以判定物理层损坏——比如ASM磁盘头被清空、磁盘离线后强制drop disk、或存储LUN被误删。这时候千万别用ocrconfig -export试图导出XML再导入:-export在OCR已损坏时大概率失败或返回截断内容;即使成功,ocrconfig -import也只适用于OCR设备完全为空的新环境,对已挂载但内容错乱的设备会静默跳过,根本不会更新。
还原前必须验证三件事:时间、权限、版本
备份文件存在不等于能用。ocrconfig -showbackup只列路径,不校验有效性。你得人工确认:
- 备份时间早于损坏发生时间:比如损坏发生在
2026-09-28 10:22,那backup_20260928_090000.ocr可用,day.ocr这种模糊命名的几乎不可靠 - 属主和权限必须是
-rw------- 1 root oinstall:权限不对会报PROT-1: Failed to open file,连读都读不了 - GI版本严格一致:运行
crsctl query crs activeversion,再用strings backup00.ocr | head -n 5比对版本字符串,19.20.0.0.0和19.20.0.20.0不兼容
验证命令:ocrconfig -verify -f /path/to/backup00.ocr,只有输出OCR backup file is valid才算真正过关。
执行ocrconfig -restore必须独占模式,且不能加-local
这不是覆盖一个文件,是重建整个集群配置上下文。多节点并发操作会导致ASM元数据不一致,轻则OCR状态异常,重则CSS进程死锁。
- 所有节点先停:
crsctl stop crs -f(每个节点都执行) - 仅首节点以独占模式启动:
crsctl start crs -excl -nocrs——此时只拉起CSS和ASM,sqlplus / as sysasm中查v$instance.status应为MOUNTED或OPEN - 执行还原:
ocrconfig -restore /path/to/valid_backup.ocr——注意:-local参数是给OLR(Oracle Local Registry)用的,加了会静默失败
还原完别急着启集群。先跑ocrcheck确认状态为healthy,再用cluvfy comp ocr -n all扫一致性。如果表决磁盘也受损,紧接着执行crsctl replace votedisk +NEW_DG。
表决磁盘损坏要分情况处理,dd恢复只适用于裸设备
表决磁盘(votedisk)和OCR不同,它不依赖ASM,可存于裸设备、ASMLib或ASM磁盘组。恢复方式取决于它的部署类型:
- 如果是裸设备(如
/dev/raw/raw2),且你有dd备份:dd if=/home/oracle/votedisk.bak of=/dev/raw/raw2即可。但要注意设备大小必须完全一致,否则crsctl query css votedisk会报ORA-15032 - 如果表决磁盘在ASM磁盘组里(19c默认如此),那就不能
dd,得走crsctl replace votedisk换到新磁盘组,再配合ocrconfig -restore同步OCR里的投票盘路径 - 冗余要求必须满足:normal冗余需至少3个votedisk,少于2个就触发脑裂自重启。检查命令:
crsctl query css votedisk,输出行数不能低于半数+1
最易忽略的一点:OCR恢复后,表决磁盘路径可能还指向旧位置。哪怕votedisk本身没坏,只要OCR里记录的路径失效,集群照样起不来——所以crsctl replace votedisk这步不能省,也不能只在单节点执行。











