能恢复,但必须满足两个前提:有ocr备份、能启动asm实例;crsctl query css votedisk返回空或报错说明css进程未读到voting file,常见于存储不可达或asm未启动;-excl -nocrs模式是唯一可操作窗口,用于绕过ocr校验启动asm并恢复。

能恢复,但必须满足两个前提:有 OCR 备份、能启动 ASM 实例(哪怕不启动 CRS)。没备份或连 ASM 都起不来,就只能重建集群——这不是恢复,是重装。
crsctl query css votedisk 返回空或报错说明什么
这表示 CSS 进程压根没读到任何 voting file,常见于磁盘路径消失、ASM diskgroup 挂载失败、或 votedisk 文件被 dd 清空头信息。注意:crsctl query css votedisk 不依赖 OCR,它直接查 CSSD 内存或本地配置;如果连这个都失败,大概率是底层存储已不可达或 ASM 未启动。
- 返回
CRS-4602: Failed to add voting file:目标 diskgroup 不存在、没挂载、或兼容性不匹配(比如compatible.asm小于 11.2) - 返回
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon:CSSD 没起来,得先用crsctl start crs -excl -nocrs启动 HAS 和 ASM - 输出里显示
OFFLINE或路径指向已删除设备(如/dev/asm-diskh),说明物理层已损坏,不能硬重启 CRS
必须用 -excl -nocrs 启动才能操作的原因
正常模式下 CRS 会校验 OCR 和 votedisk 一致性,两者缺一就卡死。而 crsctl start crs -excl -nocrs 绕过 CRS 层,只启动 OHASD + CSSD + ASM 实例,让你能登录 sqlplus / as sysasm 创建 diskgroup、恢复 OCR。这是整个恢复流程的唯一窗口。
- 执行前确认所有节点
crsctl stop crs -f彻底停止,否则会冲突 - 只在一个节点执行该命令,其他节点保持关闭
- 启动后立刻验证:
ps -ef | grep cssd应有进程,asmcmd lsdg能列出 diskgroup(哪怕为空)
crsctl replace votedisk +DG_NAME 失败的常见原因
这条命令看似简单,实际依赖 OCR 已恢复、目标 diskgroup 已挂载、且 CSSD 能写入。失败时别反复重试,先查三件事:
-
ocrcheck必须返回Status of Oracle Cluster Registry is as follows且无错误,否则replace会静默失败 -
asmcmd lsdg中目标 DG 的Voting_files列必须为Y(即创建时加了ATTRIBUTE 'au_size'='4M', 'compatible.asm'='11.2.0'等参数) - 确保 diskgroup 是 EXTERN 或 NORMAL 冗余(不能是 HIGH),且至少有 1 块可用磁盘;
crsctl replace votedisk会自动写入 3~5 个 voting file,空间不足直接报错 - 如果提示
CRS-4602且 diskgroup 明明存在,试试加绝对路径:crsctl replace votedisk '/dev/oracleasm/disks/VOL1'(仅限 raw 设备)
OCR 恢复后必须立即做 ocrcheck 和 crsctl check cluster
ocrconfig -restore 只把二进制文件写回 diskgroup,并不校验逻辑一致性。很多恢复失败案例,都是因为备份太旧(比如跨版本升级后),导致 OCR 里存着已删除的资源名或无效 IP,后续 crsctl start crs 会卡在资源启动阶段。
-
ocrcheck通过才代表 OCR 文件结构完好;若报PROC-26,说明 backup 文件本身损坏或路径不对 -
crsctl check cluster -all在所有节点执行,确认 CSSD 通信正常;如果某节点报CRS-4639,说明该节点 OLR(Oracle Local Registry)损坏,需从其他节点同步:ocrconfig -local -manualbackup+ocrconfig -local -restore - 最后一步
crsctl start crs前,务必清空所有节点的$GRID_HOME/log/<node>/cssd/ocssd.log</node>,避免旧错误干扰判断
真正麻烦的不是命令输错,而是误判状态——比如 crsctl query css votedisk 看似有输出,但其中一条是 OFFLINE,你却当成全部 OK;或者 ocrcheck 成功了,但 crsctl stat res -t 里一堆 UNKNOWN 状态,其实是 OCR 里残留了已删的 service 资源。这种细节不盯住,恢复完照样集群分裂。











