ocrcheck是唯一能直接验证ocr逻辑一致性的命令,只报告当前状态不修复;必须以grid或root用户执行,关键输出为“cluster registry integrity check succeeded”,失败则需检查asm磁盘状态及日志$grid_home/log//client/ocrcheck_*.log。

ocrcheck 是唯一能直接验证 OCR 逻辑一致性的命令,它不修复、不修改,只告诉你“现在是不是一致”——这是所有 OCR 故障排查的第一步,也是最关键的一步。
ocrcheck 命令必须以 root 或 grid 用户执行
普通 oracle 用户权限不足,会报错 CLSU-00100: Operating system function: ioctl() failed with error data: 1 或直接无输出。实际执行时必须切换到 grid 用户(或用 sudo -u grid):
-
$GRID_HOME/bin/ocrcheck—— 最简调用,无参数即可 - 输出中关键字段是
Cluster registry integrity check succeeded,只要这句出现且没报failed,就说明 OCR 内容逻辑上自洽 - 若显示
Device/File integrity check failed,说明底层存储(如 ASM disk 或文件路径)不可读,此时ocrcheck本身可能卡住或超时,需先查磁盘状态
ocrcheck 日志位置和关键线索在哪
每次运行 ocrcheck 都会在 $GRID_HOME/log/<hostname>/client/</hostname> 下生成一个 ocrcheck_*.log 文件(比如 ocrcheck_12345.log),这个日志比屏幕输出更详细:
- 它会记录 OCR 所有镜像位置(
Device/File Name)、每个位置的校验结果(integrity check)、以及 CRC 校验值比对过程 - 如果 OCR 有多个镜像(比如配置了 +OCR 和 +DATA),
ocrcheck会逐个校验并报告不一致项,例如:OCR location +OCR is inconsistent with +DATA - 注意日志末尾是否有
ERROR或WARNING行,尤其是涉及ORA-15056(ASM disk offline)或ORA-15196(ASM block corruption)的错误
ocrdump 不等于一致性检查,别误用
ocrdump 只是导出 OCR 内容为可读文本或 XML,它不校验数据完整性,也不验证键值逻辑关系。常见误操作包括:
- 看到
ocrdump成功生成文件,就认为 OCR “没问题”——错。损坏的 OCR 仍可能导出部分内容,但缺失或错乱的键不会报错 - 用
ocrdump -stdout看到输出就停止排查——危险。OCR 可能只部分加载,SYSTEM.css能读出,但CRS.ora键已损坏,集群照样启动失败 -
ocrdump输出里没有时间戳或校验和字段,无法判断内容是否与当前内存副本同步
OCR 一致性 ≠ 集群可用性,别跳过关联验证
即使 ocrcheck 显示成功,也要立刻补两步验证,因为 OCR 逻辑一致,不代表集群能正常工作:
- 运行
crsctl check cluster -all,确认所有节点 CRS 进程在线;若某节点返回CRS-4537: Could not communicate with Cluster Synchronization Services,说明 OCR 内存副本未同步或本地 OLR 异常 - 检查
crsctl query crs activeversion是否在所有节点输出一致;不一致说明 OCR 中版本信息未广播完成,属于隐性不一致 - 查看
$GRID_HOME/log/<hostname>/crsd/crsd.log</hostname>最近 10 分钟是否有OCR key update failed或master node changed记录,这类日志往往暴露 OCR 同步延迟问题
ocrcheck 那一刻的状态。真正麻烦的不是校验失败,而是校验成功后集群突然失联,那通常意味着 OCR 内容虽逻辑完整,但某个关键键(比如网络配置或资源依赖)已被人为误改,而 ocrcheck 不校验业务语义。











