ocr损坏恢复前提是备份有效且asm磁盘组可挂载或重建;需先通过ocrcheck、asmcmd lsdg、alert日志和votedisk查询排除asm异常或权限问题,再验证备份时效性与权限,最后在全停集群、单节点独占模式下执行ocrconfig -restore。
ocr 或 voting disk 损坏后,集群大概率无法启动,crsctl start crs 会直接失败,报 crs-0704、crs-10132 或 could not init olr。恢复可行的前提是:自动备份存在且有效,asm 磁盘组仍可挂载(或能重建)。没有备份或底层存储彻底不可用时,ocrconfig -restore 无意义。
怎么确认是 OCR 损坏而不是 ASM 或权限问题?
别一看到 ocrcheck 报错就动手还原。先排除更常见的外围故障:
-
ocrcheck显示Device/File not configured,但asmcmd lsdg能看到 OCR 所在磁盘组(比如OCR/)状态为MOUNTED→ 说明 OCR 文件路径丢失,不是磁盘损坏 - 检查
$ORACLE_BASE/diag/asm/+asm/+ASM*/trace/alert_+ASM*.log,搜OCR、corruption、I/O error;若大量ORA-15080或ORA-15066,才是真物理损坏 - 运行
crsctl query css votedisk。如果也报错(如CRS-4602),大概率是底层 ASM 磁盘组异常,得先修复磁盘组,再动 OCR -
ocrconfig -showbackup列出的备份时间明显早于故障发生时间(比如故障在 6 月 24 日 20:00,最近备份是 6 月 24 日 16:00)→ 备份可用;若只显示day.ocr或week.ocr,且时间跨度超 24 小时,风险极高
为什么 ocrconfig -restore 必须在独占模式下执行?
OCR 恢复不是“覆盖写文件”,而是重建集群配置上下文。多节点并发访问会导致元数据不一致甚至静默损坏:
- 必须先全集群停服:
crsctl stop crs -f(每个节点都执行) - 仅首节点启动独占模式:
crsctl start crs -excl -nocrs→ 此时只拉起 CSS 和 ASM,sqlplus / as sysasm中查v$instance.status应为MOUNTED或OPEN -
ocrconfig -restore命令不能带-local参数——那是给 OLR(本地注册表)用的,对集群级 OCR 无效,强行加会静默失败 - 路径必须是绝对路径且属主为
grid:ls -l /u01/app/12.1.0/grid/cdata/rac-cluster/backup00.ocr返回权限为-rw-r----- 1 grid oinstall才安全
Voting Disk 损坏后还能不能只恢复 OCR?
不能。Voting Disk 和 OCR 是强耦合的仲裁组件,ocrconfig -restore 只恢复 OCR 内容,但不会同步更新 Voting Disk。若 Voting Disk 已不可访问,即使 OCR 恢复成功,集群启动仍会卡在 CSS 层:
- 先确认剩余 Voting Disk 数量:执行
crsctl query css votedisk,输出中ONLINE行数必须 ≥⌊N/2⌋+1(N 是原始总数)。例如 3 块投票盘坏 1 块,剩 2 块 → 2 ≥ ⌊3/2⌋+1 = 2,可继续;坏 2 块只剩 1 块 → 1 - 替换命令是
crsctl replace votedisk +NEW_DG,新磁盘组必须是NORMAL或HIGH冗余(EXTERNAL不允许),且需提前asmcmd mount成功 - 替换完成后,CSS 会自动同步所有节点,无需重启 CRS,但必须等
crsctl query css votedisk显示全部ONLINE后再启动集群 - 如果 Voting Disk 全丢(比如误删 ASM 磁盘组),只能用
crsctl add css votedisk重新添加,但要求 OCR 已恢复且 ASM 正常,否则命令报CRS-4535
整个过程最易被忽略的是备份校验和独占模式验证。很多人跳过 ocrconfig -verify -f /path/to/backup.ocr,结果还原后发现 OCR 内部结构已损坏,又得重来;也有人在 crsctl start crs -excl -nocrs 后没确认 ASM 实例状态就跑 ocrconfig -restore,导致命令看似成功实则写入乱序数据——这些错误不会立刻报错,但集群启动时会彻底崩溃。











