ocrconfig -replace 是唯一安全的 ocr 迁移方式,必须使用原子性替换命令 ocrconfig -replace +old_ocr -replacement +newocr,确保新磁盘组为 normal 冗余且 compatible.asm >= '11.2',迁移全程在线无需停库。

ocrconfig -replace 是唯一安全的迁移方式
直接编辑 /etc/oracle/ocr.loc 或用 ocrconfig -delete + ocrconfig -add 组合操作,在 11.2+ 版本中会导致集群无法识别新位置,ocrcheck 报 “Device/File not configured”。Oracle 强制要求 OCR 位置变更必须通过原子性替换接口完成。
正确命令是:ocrconfig -replace +OLD_OCR -replacement +NEWOCR。这个操作会自动完成:校验新位置可写 → 同步复制 OCR 内容 → 更新内部元数据 → 清理旧路径引用。
- 执行前必须确保
+NEWOCR已mount,且compatible.asm >= '11.2'(查:select name, compatibility from v$asm_diskgroup where name = 'NEWOCR') - 不能漏掉
+前缀,ocrconfig -replace DATA -replacement NEWOCR会失败 - 执行后立即运行
ocrcheck,应只显示新路径并标为 “succeeded”,旧路径不再出现
必须先验证 ASM 磁盘组冗余与兼容性
OCR 在 ASM 中不接受 EXTERNAL 冗余磁盘组 —— 它依赖 ASM 的镜像机制保障高可用。NORMAL 冗余是硬性前提,否则 ocrconfig -replace 会报 CRS-4535 或静默失败。
常见错误现象:ocrcheck 显示 “Device/File integrity check failed” 或反复回退到旧路径,大概率是磁盘组冗余类型或兼容性不达标。
- 检查冗余:
select name, type from v$asm_diskgroup where name = 'NEWOCR',结果必须为NORMAL - 升级兼容性(如需):
alter diskgroup NEWOCR set attribute 'compatible.asm'='11.2'; - 若磁盘组已存在但未 mount,用
alter diskgroup NEWOCR mount(两节点都要执行)
迁移前不关库、不重启 CRS,但要停监听和实例?
不需要。OCR 迁移本身是在线操作,ocrconfig -replace 不影响数据库实例、监听器或 ASM 实例运行。但要注意:迁移过程中禁止任何节点执行 crsctl stop crs 或意外宕机,否则可能卡在中间状态。
真正需要提前做的只有三件事:
- 用
ocrconfig -manualbackup做一次手工备份(存到本地文件系统,别放 ASM 里) - 确认两节点都能访问
+NEWOCR(asmcmd ls +NEWOCR能列出内容) - 检查 CSS 进程是否正常:
crsctl check css返回 “CSS is running”
ocrconfig -add 单独执行只是添加副本,不是迁移
看到文档里写 “先 ocrconfig -add +NEWOCR,再 ocrconfig -delete +OLD_OCR”,这是 11.1 或更早版本的遗留做法。11.2+ 中,-add 只是增加一个 OCR 镜像位置,不改变主路径;此时 ocrcheck 会显示多个 “succeeded”,但集群仍从第一个路径读取 —— 这不是迁移,是冗余扩展。
如果你已经误执行了 -add,不要手动 -delete。先用 ocrconfig -showbackup 确认当前主 OCR 路径,再用 -replace 指向新位置,它会自动清理旧主路径和所有冗余副本。
容易被忽略的一点:替换完成后,旧磁盘组里的 OCR 文件不会自动删除,得靠后续 ASM rebalance 或人工清理,但只要 ocrcheck 不再引用它,就完全不影响集群运行。











