执行 _rootcrs.sh -deconfig 前必须先手动停止所有 CRS 资源并确认无残留进程,否则易卡住或报错;需根据 GI 版本选择对应脚本(11.2 用_rootcrs.sh,12.1+ 用 rootcrs.pl),并清理 OCR、网络、存储等操作系统层残留。
执行 _rootcrs.sh -deconfig 前必须停掉该节点所有 CRS 资源
直接在故障节点上跑 _rootcrs.sh -deconfig 很可能卡住或报错,因为脚本会尝试停止 ora.crsd、ora.asm 等资源,而这些资源若处于异常挂起状态(比如 asm 实例僵死、ocr 无法访问),就会导致清理中断。
实操建议:
- 先用
crsctl check cluster -all确认其他节点是否健康,避免误删正常节点 - 在待清理节点上,手动逐个停资源:
crsctl stop resource -all;若失败,加-f强制:crsctl stop resource -all -f - 确认
ps -ef | grep d.bin无ohasd、crsd、cssd进程残留,否则_rootcrs.sh会拒绝继续 - 注意:不能只依赖
crsctl stop crs—— 在 11.2+ 中它不保证停掉 ASM,而_rootcrs.sh -deconfig内部仍会调 OCR/ASM 相关检查
_rootcrs.sh -deconfig 在不同 GI 版本行为差异极大
11.2.0.3 之前版本的 _rootcrs.sh -deconfig 默认不清理 OCR 和 Voting Disk 元数据;12.1+ 则默认尝试从集群维度移除该节点注册信息,但前提是 OCR 可写且当前节点能连上 OCR 设备。
常见错误现象:CRS-4639: Could not contact Oracle High Availability Services 或 ORA-15032: not all alterations performed —— 本质是脚本试图读 OCR 时失败,却未给出明确提示。
实操建议:
- 查清 GI 版本:
crsctl query crs activeversion,再决定是否加-force或跳过 OCR 校验 - 11.2.0.4 及以后:推荐加
-verbose -force,避免交互阻塞;但-force不等于跳过 OCR 检查,只是跳过部分守护进程状态校验 - 若 OCR 存于 ASM 且该节点 ASM 已不可用,需先在其他健康节点上用
crsctl delete node -n <nodename>主动删除节点元数据,再回故障节点跑_rootcrs.sh -deconfig
删完节点后,rootcrs.pl -deconfig -force 和 _rootcrs.sh 别混用
_rootcrs.sh 是 11.2 的 shell 封装脚本,而 rootcrs.pl 是 12.1+ 的 Perl 主入口。两者参数名相似但逻辑不同:rootcrs.pl -deconfig -force 会尝试清理本地 ORACLE_HOME 下所有 GI 配置文件(包括 olsnodes 缓存、gpnp profile),而 _rootcrs.sh -deconfig 更“轻量”,主要停服务 + 清 /etc/oracle 下软链。
容易踩的坑:
- 在 12.1 GI 上误用
_rootcrs.sh(尤其从旧文档抄的命令),可能导致ora.cluster_interconnect.haip资源残留,后续加节点时报CRS-2672: Attempting to start 'ora.cluster_interconnect.haip'卡住 -
rootcrs.pl -deconfig执行后会自动运行roothas.pl -deconfig(如果启用了 HAS 模式),但_rootcrs.sh不会——这点常被忽略,导致单节点 RAC 误删后 HAIP 仍绑定网卡 - 无论用哪个脚本,执行完都应检查:
ls -l /etc/oracle/scls_scr是否为空、cat /etc/oracle/ocr.loc是否只剩有效路径、ifconfig -a | grep haip是否无输出
网络与存储配置残留比 CRS 清理更难排查
脚本能干掉 CRS 进程和配置文件,但不会碰操作系统层的东西:比如多路径设备别名(/etc/multipath.conf)、私网绑定(/etc/hosts 里的 private IP)、ASMLIB 标签(oracleasm listdisks 输出)、甚至 udev 规则里对 ASM 磁盘的权限设置。
这些残留不阻止当前节点“被清理”,但会干扰后续重建或影响其他节点识别磁盘拓扑。
实操建议:
- 删节点前,先在其他节点运行
ls -l /dev/oracleasm/disks/记下磁盘列表,删完后比对是否多出孤立设备名 - 检查
/etc/udev/rules.d/99-oracle-asmdevices.rules是否还包含该节点私有设备规则(尤其是用 raw 设备的老环境) -
/etc/hosts里删掉该节点所有行(public、private、vip),否则新节点加入时可能因解析失败触发 CSS 心跳超时 - 最隐蔽的是 GNS(Grid Naming Service)缓存:若用 GNS,需在剩余节点上执行
srvctl config gns并确认gnsctl listnode不含已删节点
真正麻烦的从来不是脚本跑不跑得通,而是删完之后,OCR 里没它了,但 ASM 磁盘头里还记着它的 heartbeat,或者私网交换机上 ACL 还拦着它的 MAC 地址 —— 这些地方没日志、不报错,只让后续操作越来越慢、越来越随机失败。






























