结论:卸载oracle必须分三步——停服务、清残留、验空档;漏任一步将导致重装时出现ora-00119、ora-00132、监听失败或runinstaller拒绝启动。

直接说结论:不能只靠 deinstall 脚本,也不能只删目录,必须分三步走——停服务、清残留、验空档。漏掉任意一步,重装时大概率遇到 ORA-00119、ORA-00132、监听起不来、或 runInstaller 拒绝启动。
先停数据库和监听,别跳过 sqlplus / as sysdba
很多人以为 deinstall 会自动停库,其实它只检查进程,不强制终止。如果实例还在跑,后续清理会失败或残留共享内存段。
- 必须先切到
oracle用户执行:sqlplus / as sysdba→shutdown immediate→exit - 再停监听:
lsnrctl stop(注意不是lsnrctl shutdown,后者不生效) - 验证是否真停了:
ps -ef | grep -E "(ora_|tnslsnr)" | grep -v grep,输出应为空 - 如果卡在
shutdown immediate,说明有活跃会话,改用shutdown abort,但之后重装前需手动清/u01/app/oracle/fast_recovery_area/orcl下的 controlfile 和 online redo log
用 $ORACLE_HOME/deinstall 做基础清理,但别信它的“完成”提示
deinstall 是 Oracle 官方提供的最小安全入口,但它默认不删 /etc/oratab、不删 oraInst.loc、不删用户组,更不会碰 /usr/local/bin 下的软链——这些全是重装时报错的高发点。
- 执行前确认路径:
cd $ORACLE_HOME/deinstall && ./deinstall(不是./runInstaller -deinstall,后者已废弃) - 过程中会问你是否删除监听器配置,选
y;问是否删除数据库,选y;最后问 “Do you want to continue (y - yes, n - no)? [n]:” ——这里必须输y并回车,否则只是生成脚本不执行 - 它生成的清理脚本(如
/tmp/deinstall2026-09-30_00-20-15-AM/deinstall.sh)要用root手动运行,且运行完仍需人工补删 - 日志默认在
/tmp/deinstall*/logs/,重点看deinstall.log末尾有没有Successfully completed the deinstall,没这句就等于没清干净
手动扫尾的 6 个硬核路径,一个都不能留
CentOS 7 上静默卸载最常翻车的地方,就是以为 deinstall 干完了,结果 runInstaller 启动时直接报 ERROR: Unable to find sufficient memory 或 PRVF-7532 : Sufficient amount of swap space was not found——其实是 /etc/oraInst.loc 还在,导致安装程序复用旧 inventory,读到错误的内核参数缓存。
-
rm -f /etc/oratab /etc/oraInst.loc(这两个是核心元数据,必须删) -
rm -f /usr/local/bin/dbhome /usr/local/bin/oraenv /usr/local/bin/coraenv(残留软链会导致新 oracle 用户环境变量污染) -
rm -rf $ORACLE_BASE $ORACLE_HOME /u01/app/oraInventory(注意:若$ORACLE_BASE是/u01/app/oracle,则$ORACLE_HOME一定在其子路径下,别重复删错层级) -
userdel -r oracle(不删用户,runInstaller会拒绝以该用户重装;加-r才删家目录和.bash_profile) -
groupdel oinstall dba oper(尤其oper组常被忽略,它是后台进程启动必需组) -
rm -rf /tmp/OraInstall* /tmp/*oracle*(临时解压目录残留会导致静默安装读取旧响应文件)
验证卸载干净的关键命令,比 du -sh 更管用
光看磁盘空间释放了没意义。真正要验证的是系统级状态是否归零——没有进程、没有配置、没有用户、没有 inventory 缓存。
- 查进程:
ps -ef | grep -i "ora\|tns\|oracle"→ 应无输出 - 查用户:
id oracle→ 返回no such user - 查组:
getent group oinstall→ 应无输出 - 查关键文件:
ls -l /etc/oratab /etc/oraInst.loc /usr/local/bin/oraenv 2>/dev/null || echo "all gone" - 查 inventory 是否真清空:
cat /etc/oraInst.loc 2>/dev/null→ 应报 “No such file” - 最后执行一次
du -sh /u01对比卸载前,确认空间已释放(但空间释放 ≠ 卸载干净)
真正麻烦的从来不是删文件,而是那些看不见的注册点:比如 /etc/oraInst.loc 里记录的 inventory 路径,会被新安装程序自动读取并沿用旧参数;又比如 oracle 用户残留的 .bash_profile,会让新装的 ORACLE_HOME 指向旧路径。这些点不手动捅穿,静默安装永远在报错边缘反复横跳。











