ocrcheck报“the ocr configuration is invalid”本质是节点间ocr数据不一致导致的信任失效,需先比对所有节点ocrcheck输出,再用root执行ocrconfig -repair,并确保olr.loc正确、ocr设备可访问、私网互通。

OCR配置失败不是配置写错了,而是节点间状态不一致或物理层不可达导致的“信任崩塌”。
ocrcheck 报 “The OCR configuration is invalid” 怎么办
这个错误本质是当前节点读到的 OCR 数据和集群里其他节点不一致,不是文件损坏,而是同步中断后的“认知偏差”。它常发生在节点异常重启、网络分区后未完全恢复、或手动修改过 OCR 设备路径但未全节点同步时。
- 先在所有节点分别运行
ocrcheck,比对输出中的Device/File Name和Cluster registry integrity check succeeded状态是否一致 - 若某节点显示
PROT-602: Failed to retrieve data或无任何 Device 行,说明该节点根本没连上 OCR 设备,跳过修复直接查底层(见下一条) - 若所有节点都显示 Device 路径正常但提示 invalid,用
ocrconfig -repair修复当前节点:必须以root用户执行,且目标节点必须能访问至少一个正常的 OCR 备份(ocrconfig -showbackup要有可用项) - 执行前确认 GI 版本一致:
crsctl query crs activeversion在所有节点输出应完全相同;否则-repair会静默失败
ocrconfig -repair 执行后仍无效的三个硬性前提
ocrconfig -repair 不是万能命令,它依赖三个物理条件同时满足,缺一不可:
- 当前节点的
/etc/oracle/olr.loc文件必须存在且内容正确,指向本地 OCR 镜像(OLR)路径,例如olrconfig_loc=/u01/app/19.0.0/grid/cdata/olr.ocr - OCR 主设备(ASM 磁盘组或裸设备)必须在该节点上可访问:用
asmcmd lsdg确认对应磁盘组 STATE 为MOUNTED;若为DISMOUNTED,需先sqlplus / as sysasm手动ALTER DISKGROUP OCRVOTE MOUNT - 该节点必须能通过私网与其他节点通信:运行
olsnodes -n应列出全部节点编号;若缺失,检查/u01/app/19.0.0/grid/log/<hostname>/cssd/ocssd.log</hostname>中是否有IPC Send timeout,大概率是防火墙封了 UDP 12345 或多播地址不通
srvctl config database 显示旧实例名,但实例已停用
这说明 OCR 里残留了已删除实例的注册信息,srvctl remove instance 失败后留下的“幽灵资源”,常见于未先停实例就强行删、或 -db 参数填了 db_name 而非 db_unique_name。
- 先确认实例真已停:
srvctl status instance -d <db_unique_name> -i <inst_name></inst_name></db_unique_name>必须返回 “instance is not running” - 查出对应资源名:
crsctl stat res -w "TYPE = ora.database.type" | grep -A 2 <db_unique_name></db_unique_name>,找到类似ora.<db_unique_name>.<inst_name>.inst</inst_name></db_unique_name>的条目 - 强制清理:
crsctl delete resource ora.<db_unique_name>.<inst_name>.inst -f</inst_name></db_unique_name> - 清理后立即验证:
srvctl config database -d <db_unique_name></db_unique_name>输出中Database instances:行不应再含该实例名 - 注意:删完必须补跑
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={node1,node2}" -silent,否则 DBCA 新建实例会拒绝
OCR 自动备份找不到 backup00.ocr 文件
自动备份失效往往在故障前就埋下了,等真出事才查,基本等于没备份。19c 默认每 4 小时由 ohasd 触发一次,但它只在 OCR 可读 + 备份路径可写 + GI 进程健康时才执行。
- 日常必须定期运行:
ocrconfig -showbackup—— 正常应列出至少 3 个不同时间戳的backup*.ocr和day.ocr/week.ocr - 确认文件真实存在:
ls -l $GRID_HOME/cdata/<cluster_name>/backup*.ocr*</cluster_name>,缺.ocrb元数据文件则备份不可用 - 检查权限:
backup*.ocr文件属主必须是root:oinstall,权限为644;否则ocrconfig -restore会报PROT-1: Failed to open file - 版本锁死:备份文件必须来自同 GI 版本,用
strings backup00.ocr | head -n 5查版本字符串,与crsctl query crs activeversion输出严格一致
OCR 配置问题最危险的点在于:表面是配置错,根子常在存储可见性、私网连通性、或权限一致性这些“看不见”的地方。别急着改参数,先让每个节点都真正看得到、读得懂、信得过 OCR 设备本身。











