删节点前必须确认三件事:一是olsnodes -s -t显示目标节点为Active Unpinned,否则先crsctl unpin css -n;二是该节点所有数据库实例已停止且从OCR移除;三是SCAN Listener和VIP不在该节点运行,否则需先relocate或stop。
删节点前必须确认的三件事
不是所有“看起来能删”的节点都适合直接执行 crsctl delete node -n node_name。这命令本质是告诉集群“这个节点已永久离线”,一旦执行,ocr 中的节点注册信息立刻移除,后续若误操作或残留资源没清干净,会导致 crs 启动失败、vip 漂移异常,甚至整个集群心跳中断。
-
olsnodes -s -t必须显示目标节点状态为Active Unpinned;如果仍是Pinned,得先在所有保留节点上运行crsctl unpin css -n node_name,否则删不掉 - 确认该节点上所有数据库实例已彻底停止且从 OCR 移除:用
srvctl config database -d db_unique_name查看Database instances列表里不能含该节点的实例名 - 检查 SCAN Listener 和 VIP 是否还在该节点运行:
srvctl status listener -l LISTENER和srvctl status vip -i vip_name;若仍在,需先 relocate 或 stop,否则crsctl delete node会报 CRS-4678 或 CRS-2501
dbca 静默删实例比图形界面更可靠
图形化 dbca 在节点宕机或网络异常时经常卡在“等待实例响应”阶段,而静默模式绕过 UI 层校验,直接调用底层 API 清理 OCR 和数据字典。但参数顺序和大小写敏感——比如 -gdbName 的 g 必须小写,-instanceName 的 I 必须大写,错一个就报 PRKP-1001 或 ORA-01017(密码错误假象)。
- 在任一正常节点以
oracle用户执行:dbca -silent -deleteInstance -nodeList rac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle - 删完立刻验证:
sqlplus / as sysdba连上去查SELECT instance_name, status FROM gv$instance WHERE instance_name = 'orcl3';—— 应返回空集 - 别忘了禁用 thread:
ALTER DATABASE DISABLE THREAD 3;(thread 编号通常等于实例编号),否则 redo 日志组不会自动 drop,后续重建节点可能冲突
清理 Grid Infrastructure 节点要分两步走
crsctl delete node 只删 OCR 注册,不碰本地文件系统。真正卸载 GI 软件必须在被删节点本机操作,且顺序不能颠倒:先更新 inventory 再 deinstall,否则 deinstall -local 会误判为“要卸载整个集群”,把其他节点的 $GRID_HOME 也干掉。
- 在待删节点(如
rac3)上,用grid用户执行:$GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={rac3}" CRS=TRUE -silent -local - 再执行:
$GRID_HOME/deinstall/deinstall -local(注意必须带-local) - 手动清理残留:
rm -f /etc/oraInst.loc /etc/oratab /etc/oracle/*;共享存储上的 OCR/Voting Disk 不用动,它们由剩余节点自动管理
最后一步验证常被跳过,但最易暴露问题
很多人删完就以为结束,结果第二天发现 cluvfy 报 CRS-4639(无法连接 CSSD),或者新节点加不进去。根本原因是 OCR 中还存着旧节点的 network profile、GNS 配置等隐性依赖。
- 在任意保留节点运行:
cluvfy stage -post nodedel -n rac3 -verbose,重点看 “Network interface check” 和 “OCR integrity” 两项是否 PASS - 检查
/u01/app/oraInventory/ContentsXML/inventory.xml—— 确认里面只剩保留节点的HOME条目,没有rac3相关路径 - 删完节点后首次重启集群时,留意
crsctl check cluster -all输出中是否仍有rac3出现;若有,说明rootcrs.pl -deconfig -force没在该节点执行,或执行后未 reboot
真正的难点不在命令本身,而在删节点前后对集群状态的持续观测——OCR、CSS、ASM、监听器、thread、inventory,五层状态必须全部对齐,漏一个,后面加节点或打补丁就可能崩。










