OCR迁移不存在无缝切换,必须先ocrconfig -add新增镜像、再ocrconfig -delete删除旧镜像、最后逐节点重启CRS;OCR与表决盘迁移需分别执行crsctl replace votedisk。

“无缝切换”在 OCR 场景中不存在——ocrconfig -add +DG 后必须执行 ocrconfig -delete +OLD 且最终需重启 CRS,否则新配置不生效。
ocrconfig -add 后 OCR 并未真正切换
执行 ocrconfig -add +NEWOCR 只是增加一个镜像副本,此时 OCR 处于多副本共存状态(旧位置仍为主用),集群运行不受影响,但 ocrcheck 输出里仍显示旧路径。这不是“切换”,只是冗余扩容。常见误判是看到命令返回成功就认为迁移完成,结果后续 ocrcheck -details 仍报旧磁盘组路径,且 crsctl query css votedisk 也无变化。
- 必须确保目标磁盘组已挂载、冗余为 NORMAL/HIGH、空间 ≥ 500 MB、无
_DROPPED_磁盘(asmcmd lsdsk -kG可查) - 添加后立即验证:
ocrcheck -config显示所有已配置路径,cat /var/opt/oracle/ocr.loc应含新增行 - 若添加失败,典型错误是
ORA-15032: not all alterations performed或CRS-4257: Failed to replace OCR location,基本对应磁盘组状态或权限问题
删除旧 OCR 镜像前必须满足最小副本数
Oracle 要求 OCR 至少保留 2 个有效副本才能安全执行 ocrconfig -delete +OLD_OCR。如果当前只有 1 个副本(比如刚加完新镜像但还没确认写入成功),强行删除会导致集群无法启动。
- 先运行
ocrcheck -details,确认输出中 “Number of configured OCR locations” ≥ 2 且 “Status” 全为 OK - 删除操作仅移除配置项,不触碰物理文件;旧 OCR 文件会保留在原磁盘组中,直到你手动清理(非必需,但建议迁移完成后
dd if=/dev/zero of=+OLD_OCR/OCRFILE bs=1M count=10覆盖) - 若误删导致只剩 1 副本,可用
ocrconfig -restore从自动备份恢复(前提是备份路径不在被删磁盘组内)
crsctl stop crs && crsctl start crs 是不可跳过的生效步骤
即使 ocrconfig -delete 成功,只要没重启 CRS,集群仍读取旧 OCR 路径,ocrcheck 和 crsctl query css votedisk 都不会更新。这不是 bug,而是 Clusterware 架构决定的:OCR 配置在 CRS 启动时加载进内存,运行时不热重载。
- 该操作是节点级停机,非全集群中断;可逐节点执行,RAC 服务在其余节点持续提供
- 执行前务必确认 GI 已停止:
crsctl check crs返回 “CRS-4638: Oracle High Availability Services is online” 表示未停,需先crsctl stop crs -f - 重启后立刻验证:
ocrcheck -details的 “Device/File Name” 应只列新磁盘组路径,“OCR location” 数量为 1;crsctl query css votedisk若同时迁了表决盘,也应同步更新
最容易被忽略的是:OCR 迁移和表决盘迁移是两个独立动作。很多人以为 ocrconfig 操作完就万事大吉,却忘了 crsctl replace votedisk +NEWOCR 必须单独执行——哪怕 OCR 和 VOTE 原本就在同一磁盘组,替换 OCR 后表决盘默认不会跟着动。不处理它,下次磁盘故障时可能只剩 OCR 有冗余,而表决盘单点失效直接导致集群分裂。











