必须先停资源、查依赖、再强制删OCR记录,否则crsctl delete resource会静默失败或报ORA-40001;OCR损坏时需用crs_unregister绕过校验直删,删后须执行runInstaller -updateNodeList同步inventory。

必须先停资源、查依赖、再强制删OCR记录,否则 crsctl delete resource 会静默失败或报 ORA-40001。
crsctl delete resource 报 ORA-40001 或 “does not exist” 怎么办
这不是命令写错,而是 OCR 元数据已损坏或资源定义不一致。crsctl stat res -t 还能看到残留条目,但常规删除命令失效——说明资源在 CRS cache 里“有影子”,在 OCR 里却“没户口”。此时不能重试或加 -f,必须切换到底层清理路径。
- 先确认资源是否真停了:
crsctl stop resource <res_name></res_name>;失败就加-f强制停 - 查它有没有被其他资源依赖:
crsctl stat res <res_name> -p | grep "REQUIRED_RESOURCES"</res_name> - 确认没被数据库或 ASM 引用:
crsctl stat res -t | grep -E "(DATABASE|ASM)"+SELECT * FROM v$asm_client - 别用
crsctl delete resource,改用crs_unregister <res_name></res_name>——这是唯一能绕过 CRS 校验直删 OCR 记录的命令
删完资源后 srvctl config database 还显示旧实例名
因为 crs_unregister 只清 OCR,不更新 inventory 和数据库层配置。srvctl 输出来自 OCR + $ORACLE_HOME/inventory,两者不同步就会出现“删了还看见”的假象。
- 手动删 OCR 中残留的实例资源:
crsctl delete resource ora.orcl.orcl2.inst -f - 若对应 ASM 实例还在:
crsctl delete resource ora.rac2.ASM2.asm -f - VIP 也要同步清理:
crsctl delete resource ora.rac2.vip -f - 最后必须在健康节点执行:
runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES={node1,node2} -local -force -silent,否则 inventory 不刷新
deletenode.sh 执行后仍有 /cdata//nodeX 目录残留
deletenode.sh -local 只处理 OUI 注册和部分配置文件,/u01/app/19.0.0/grid/cdata/<cluster_name>/</cluster_name> 下的节点专属目录(如 node3/)它完全不碰。漏掉这个,下次加节点时 OCR 会认为该节点“历史存在但状态不明”,直接拒绝加入。
- 所有节点都要执行:
rm -rf /u01/app/19.0.0/grid/cdata/<cluster_name>/nodeX</cluster_name> -
/etc/hosts中该节点的 VIP、SCAN VIP、GNS VIP 条目必须全删,否则新节点解析失败 - 检查 udev 规则:
ls /etc/udev/rules.d/ | grep -i asm,删掉所有含oracleasm或旧 WWID 的规则文件 - OCR 备份里也可能存旧节点信息:
ocrconfig -showbackup查看,必要时用ocrdump检查内容
OCR 损坏严重导致 crs_unregister 都执行不了
如果连 crs_unregister 都报 CRS-0184: Cannot communicate with the CRS daemon,说明 OCR 块级校验失败,不能再依赖任何 CRS 工具链操作。
- 先跑
ocrcheck -detail,看是否输出 “Logical corruption detected” - 有可用备份就优先回滚:
ocrconfig -restore /u01/app/19.0.0/grid/cdata/<cluster_name>/backup_20260910_000000.ocr</cluster_name>(需所有节点 CRS 停止) - 无备份只能重建:
ocrconfig -overwrite,但会丢失所有自定义资源定义——所以删节点前务必导出:ocrconfig -export /tmp/pre_delete.ocr - 重建后要重新注册关键资源:
crsctl add resource或通过srvctl add补回监听器、数据库等
真正难的不是命令怎么敲,而是每一步都得确认上一步的副作用是否清除干净。比如删了资源没清 /cdata 目录,加节点时 OCR 会报 CRS-2672;删了 OCR 记录没跑 runInstaller -updateNodeList,srvctl 就永远“看不见”变化。这些点不在文档首页,但在生产环境里,一个没扫到,后续所有操作都会卡住。











