必须先停库、再停监听、最后停HTTP服务,否则deinstall脚本会失败;需用root删除/etc/oratab、/etc/oraInst.loc及全局oraInventory,并清理/usr/local/bin下的oracle工具链。
停库、停监听、停HTTP服务必须按顺序执行
oracle 11g 卸载前不彻底停止运行组件,会导致 deinstall 脚本失败或残留进程锁住文件。先用 sqlplus / as sysdba 连入数据库,执行 shutdown immediate;再用 lsnrctl stop 关闭监听;最后用 service httpd stop(如果启用了 oracle http server)。注意:不能跳过任意一步,尤其 httpd 容易被忽略,但它会占用端口并阻止后续清理。
用 root 删除 /etc/oratab 和 /etc/oraInst.loc 是关键动作
这两个文件是 Oracle 安装的“注册中心”,/etc/oratab 记录所有已配置的数据库实例与对应 ORACLE_HOME,/etc/oraInst.loc 指明全局 Inventory 位置。若不删,重装时 runInstaller 仍会读到旧记录,报错 ORA-27125: unable to create shared memory segment 或提示“已存在同名 Oracle Home”。删除命令必须用 root 权限:
rm -f /etc/oratab rm -f /etc/oraInst.loc
删完可立即验证:执行 cat /etc/oratab 应返回空或“No such file”。
oraInventory 目录不能只删 $ORACLE_HOME/deinstall
$ORACLE_HOME/deinstall/deinstall 脚本只能清理当前 Home 下的软件,但全局 Inventory(通常在 /u01/app/oraInventory)独立存在,里面存着所有 Oracle 产品安装记录。不手动删它,下次安装会复用旧 Inventory,导致冲突或静默失败。正确做法是:
- 先确认路径:
cat /etc/oraInst.loc(若已删,则查历史日志或默认位置/u01/app/oraInventory) - 用
root执行:rm -rf /u01/app/oraInventory(路径依实际而定) - 别漏掉
/u01/app/oracle/product/11.2.0/dbhome_1/inventory这类嵌套 inventory(极少见,但某些手动安装会生成)
清理 /usr/local/bin 下的 oracle 工具链容易被跳过
Oracle 安装时会把 dbhome、oraenv、coraenv 三个 shell 脚本复制到 /usr/local/bin/,它们用于快速切换环境变量。卸载后这些文件仍在,一旦用户执行 oraenv,仍会加载已删除的 ORACLE_HOME,引发 ORA-12162: TNS:net service name is incorrectly specified 类错误。务必逐个删除:
rm -f /usr/local/bin/dbhome rm -f /usr/local/bin/oraenv rm -f /usr/local/bin/coraenv
删完建议检查:which oraenv 应无输出;echo $ORACLE_HOME 应为空(前提是没在 shell 配置里硬编码)。
Oracle 11g 在 Linux 下真正干净的卸载,难点不在删目录,而在 Inventory 和系统级配置文件的联动关系——哪怕只漏一个 /etc/oraInst.loc 或一个 /usr/local/bin/oraenv,都可能让下一次安装卡在“检测已有安装”阶段,且错误信息不直接指向根源。











