ocrconfig 不支持真正在线迁移 OCR,必须通过添加新位置、删除旧位置并重启 CRS 的方式完成,且需同步验证和迁移 Vote Disk。

ocrconfig 不支持直接在线迁移 OCR 到另一个 ASM 磁盘组。OCR 必须始终位于一个正常挂载、冗余充足的 ASM 磁盘组中,且迁移过程**无法全程“在线”**——至少需要一次短暂的集群重启或 crsctl stop crs/crsctl start crs 操作,这是由 Oracle Clusterware 架构决定的。
下面分步骤说明真实可行的操作路径和关键约束:
确认目标磁盘组满足 OCR 存放前提
OCR 对底层 ASM 磁盘组有硬性要求,不满足则 ocrconfig -replace 会直接报错(如 ORA-15032: not all alterations performed 或 CRS-4257: Failed to replace OCR location):
• 目标磁盘组必须已挂载(asmcmd lsdg 显示 state = MOUNTED)
• 冗余类型必须是 NORMAL 或 HIGH(EXTERNAL 不允许存放 OCR)
• 可用空间 ≥ 280 MB(Oracle 19c 起最低要求,建议预留 500 MB+)
• 所有磁盘必须处于 ONLINE 状态,无 _DROPPED_ 或 OFFLINE 条目(参考你知识库中 lsdsk -kG RAC19C_OCR 输出里出现 _DROPPED_0001 就不可用)
• 不能是当前正在使用的 OCR/VOTE 磁盘组(即不能自迁)
执行 OCR 迁移的最小停机操作序列
所谓“在线迁移”实际是“带最小中断的迁移”,核心动作是替换 + 重启 CRS:
• 先用 ocrconfig -add +NEWOCR 添加新位置(此时 OCR 多副本并存,集群仍可用)
• 再用 ocrconfig -delete +OLD_OCR 删除旧位置(注意:仅当已有 ≥2 个有效 OCR 副本时才安全)
• 最后执行 crsctl stop crs && crsctl start crs(节点级,非全集群停)——这步不可跳过,否则 OCR 配置不生效,ocrcheck 仍显示旧路径
• 验证:运行 ocrcheck -details 和 crsctl query css votedisk,确认输出中只含新磁盘组路径,且状态为 ONLINE
为什么不能跳过 CRS 重启?
OCR 配置变更不会热加载到 CSS(Cluster Synchronization Services)进程。CSS 启动时从 ASM 读取 OCR 位置并固化在内存中,运行时不会主动轮询配置变化。因此:
• 即使 ocrconfig -showbackup 显示新路径已写入,ocrdump 仍可能读不到新位置内容
• 若跳过重启,遇到节点重启或 CSS 异常崩溃,可能因找不到有效 OCR 而导致节点无法加入集群(报错如 CRS-4602: Failed to communicate with CRS daemon)
• 你知识库中提到的 _DROPPED_ 磁盘问题,恰恰说明 OCR 所在磁盘组一旦出现物理异常,CSS 无法自动切换——它依赖的是静态配置,不是动态发现
迁移后必须验证 Vote Disk 是否同步
OCR 和 Vote Disk 默认共存于同一磁盘组(除非显式分离),但迁移 OCR 不等于自动迁移 Vote Disk:
• 运行 crsctl query css votedisk,检查输出是否也指向新磁盘组
• 如果仍是旧路径,需手动迁移:先 crsctl delete css votedisk +OLD_OCR,再 crsctl add css votedisk +NEWOCR
• 注意:Vote Disk 数量必须满足 N/2 + 1 规则(如 3 节点集群至少 3 份),删除前确保新磁盘组内已创建足够故障组(Failure Group),否则添加会失败
• 迁移 Vote Disk 后同样需重启 CRS,否则 CSS 无法识别新仲裁位置


















