必须分三步走:先在健康节点执行crsctl delete node -n <node_name>逻辑下线节点并清理OCR注册;再在失效节点本地运行$GI_HOME/oui/bin/deletenode.sh -local清理OUI和本地配置;最后在健康节点执行runInstaller -updateNodeList同步OCR与inventory节点列表。
直接删失效节点不能只跑 deletenode.sh,它根本不会生效,甚至会破坏 ocr 状态。必须分三步走:先从集群注册表和 ocr 中“逻辑下线”,再清理本地残留,最后同步 inventory 和配置。
crsctl delete node 为什么必须在健康节点执行
crsctl delete node -n <node_name> 是唯一能从集群心跳注册、OCR 节点列表、CRS 元数据中抹掉该节点的命令,但它**只能在其余在线节点上运行**,且要求:
- olsnodes -n 输出里还包含待删节点名(否则说明 OCR 已认为它离线,此步可跳过)
- 待删节点必须处于 OFFLINE 或完全不可达状态(crsctl check cluster -all 显示 CRS-4639 或超时)
- 不能在失效节点本机执行——它连 CRS 进程都起不来,命令会报 PRCR-1076 或直接 hang 住
常见错误是误以为“节点挂了就不用管”,结果 srvctl config database -d orcl 仍显示旧实例名,后续加节点或 DBCA 操作全失败。
srvctl remove instance 失败时怎么强制清理 OCR 资源
当srvctl remove instance -d orcl -i orcl2 报 “instance does not exist” 并确认实例已停,说明 OCR 里还有残留资源记录。此时需手动清理:
- 先查资源名:crsctl stat res -w "TYPE = ora.database.type" | grep -A 2 orcl
- 找到类似 ora.orcl.orcl2.inst 的条目,执行: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注意:这些操作不自动更新 srvctl config database 输出,必须配合下一步的 runInstaller -updateNodeList 才算真正完成。
runInstaller -updateNodeList 必须严格指定剩余节点
runInstaller -updateNodeList 不是刷新缓存,而是重写 OCR 中数据库层级的节点白名单。漏掉这步,哪怕物理节点已下线,DBCA 仍拒绝在新节点建实例。
- 在任意健康节点以 oracle 用户执行(不是 root,也不是 grid)
- CLUSTER_NODES 参数必须**只列当前存活节点**,例如只剩 rac1,rac2,就不能写成 {rac1,rac2,rac3} 或留空
- 路径必须用实际 $ORACLE_HOME:$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac1,rac2}" -silent
- 执行后检查 $ORACLE_HOME/inventory/ContentsXML/install.xml,确认 <node_list> 内容已更新
这个步骤常被跳过,导致 OCR 和 inventory 不一致,下次打补丁或升级时静默失败。
deletenode.sh 只能在失效节点本地运行,且必须加 -local
deletenode.sh 的作用非常窄:清理本机 OUI 注册、移除 GI 安装痕迹、删除本地 /etc/oracle/olr.loc 和 ocr.loc。但它有硬性限制:
- 必须在**待删节点本机**执行(哪怕进 rescue 模式挂载根文件系统)
- 不能在健康节点上跑——那只会清自己本机的 OUI 缓存,对集群无影响
- 必须加 -local 参数,否则它会尝试连接 CRS 服务,必然失败
- 12c+ 版本路径是 $GI_HOME/oui/bin/deletenode.sh,不是 $ORACLE_HOME 下
删完后还得手动清理四样东西:/u01/app/19.0.0/grid/cdata/<cluster_name>/<node_name>/ 目录、/etc/hosts 里的 VIP 条目、udev 规则中该节点 WWID、以及所有残留的 lk<SID> 和 sgadef<SID>.dbf 文件——deletenode.sh 一个都不碰。


















