不能直接卸掉整个RAC,需分步手动执行:先oracle用户卸DB软件,再grid用户卸GI;必须先停集群(crsctl stop crs)并确认无残留进程,否则deinstall会卡在资源检查阶段;卸载后须清理/etc/、/var/tmp/、软链接及$ORACLE_HOME;ASM磁盘和OCR需单独清零,否则重装失败。
deinstall 脚本能不能直接卸掉整个 RAC?
不能一锤子敲完。oracle 的 deinstall 工具是分层卸载的:它不自动判断“先删 db 还是先删 grid”,也不会跨用户(oracle vs grid)统一执行。你得按角色、按顺序手动触发两次——先用 oracle 用户卸数据库软件,再用 grid 用户卸 grid infrastructure。跳过任一层,ocr、asm 磁盘、集群服务残留都会导致后续重装失败。
为什么必须先停集群再跑 deinstall?
因为 deinstall 会调用 CRS 接口做资源检查和清理,如果 crsctl stat res -t 显示资源异常或部分 offline,脚本大概率卡在“网络配置检查”或“EMCA 取消配置”阶段,报错类似 CRS-4640: Oracle High Availability Services is not running 或静默退出。这不是 bug,是保护机制。
- 每个节点都执行:
crsctl stop crs(root 用户) - 确认无残留进程:
ps -ef | grep -E "(ora_|d.bin|ohasd|cssd)",有就kill -9 - 别信“集群看起来没跑”,
crsctl check cluster -all才算数
卸载后那些 rm -f 命令到底删什么?
deinstall 脚本只管 $ORACLE_HOME 和注册信息,不管系统级痕迹。这些残留不清理,新装时会冲突——比如 /etc/oratab 里还留着旧实例名,DBCA 就可能误读;/etc/init.d/ohasd 残留会导致开机自启失败甚至挂起系统。
- 每个节点都要执行(注意不是只在主节点):
rm -f /etc/init.d/ohasd /etc/oracle/* /etc/oraInst.loc /etc/inittab.crs /etc/ohasd - 清临时通信通道:
rm -rf /var/tmp/.oracle /var/tmp/* /var/tmp/.* - 删软链接入口:
rm -f /usr/local/bin/{dbhome,oraenv,coraenv} - 最后删安装根目录:
rm -rf /u01/app/* /u01(路径按你实际$ORACLE_HOME调整)
ASM 磁盘和 OCR 不清,等于白卸
deinstall 不碰 ASM 磁盘设备本身,更不会格式化。如果你保留了磁盘组(比如 +DATA),下次建库时 ASM 实例可能识别出旧的 diskgroup header,报 ORA-15032 / ORA-15017,或者误挂载旧数据文件。
- 先查盘:
oracleasm listdisks - 逐个删注册:
oracleasm deletedisk DISK1 - 物理清零(关键!):
dd if=/dev/zero of=/dev/mapper/vg_ocr-lv_ocr bs=1M count=100(路径替换成你真实的 ASM 设备) - 存储侧若支持,直接在 SAN 或 NAS 上做 LUN 重初始化,比
dd更彻底
OCR 和 voting disk 所在磁盘不清,rootcrs.pl -deconfig -force 都可能失败;这步漏掉,重装 Grid 时会卡在 “Creating OCR backup” 无限等待。

















