文章目录
- 一、场景切入
- 二、卸载不干净的后果
- [三、方式一:deinstall 工具(推荐)](#三、方式一:deinstall 工具(推荐))
-
- [3.1 交互式卸载](#3.1 交互式卸载)
- [3.2 静默两步卸载](#3.2 静默两步卸载)
- [四、方式二:runInstaller 卸载](#四、方式二:runInstaller 卸载)
- 五、手工清理完整清单
-
- [5.1 停库、停监听](#5.1 停库、停监听)
- [5.2 杀残留进程](#5.2 杀残留进程)
- [5.3 删除软件与数据目录](#5.3 删除软件与数据目录)
- [5.4 清理 inventory 配置与 oratab](#5.4 清理 inventory 配置与 oratab)
- [5.5 清理 /usr/local/bin 下的切换脚本](#5.5 清理 /usr/local/bin 下的切换脚本)
- [5.6 清理临时文件](#5.6 清理临时文件)
- [5.7 释放共享内存段与信号量](#5.7 释放共享内存段与信号量)
- [5.8 删除用户与组(可选)](#5.8 删除用户与组(可选))
- 六、清理后的验证(重装前检查)
- 七、要点总结
一、场景切入
安装失败后想推倒重来,rm -rf /u01 一把删完就重装,结果 runInstaller 刚起来就报 inventory 相关错误;或者旧机器要腾出来装新库,发现 DBCA 建库时总带着旧 SID 的影子。这些多半是上次没卸干净。Oracle 的安装状态散落在文件系统、inventory、共享内存多个地方,清单式清理才能卸得干净。
二、卸载不干净的后果
- Central Inventory(/etc/oraInst.loc 指向的目录)里残留旧 ORACLE_HOME 注册,重装时路径冲突,报 INS-32014 之类的目录占用错
- oraInst.loc 指向的目录被删了但文件还在,runInstaller 直接报 inventory 损坏
- /etc/oratab 残留旧实例条目,oraenv 切换环境时找不到库,dbca/自动巡检脚本被误导
- 旧实例留下的共享内存段、信号量没释放,新实例启动时报资源不足
- /usr/local/bin 下的 dbhome、oraenv 还是旧路径的脚本
三、方式一:deinstall 工具(推荐)
Oracle 自带的官方卸载工具,会自动停库、删文件、清 inventory 和 oratab 条目。
3.1 交互式卸载
bash
su - oracle
cd $ORACLE_HOME/deinstall
./deinstall
过程中按提示确认数据库列表、是否删除数据库与文件,一路确认即可。完成后它会把执行过的清理动作汇总输出。
3.2 静默两步卸载
先生成响应文件(此时不做任何删除):
bash
./deinstall -silent -checkonly
结束后提示生成的 rsp 文件路径,形如 /home/oracle/deinstall/deinstall_config_txt_2024-xx-xx.ora,再执行真正的卸载:
bash
./deinstall -silent -paramfile /home/oracle/deinstall/deinstall_config_txt_2024-xx-xx.ora
注意 $ORACLE_HOME/deinstall 目录不存在时,需要单独下载对应版本的 deinstall 工具包。
四、方式二:runInstaller 卸载
bash
$ORACLE_HOME/runInstaller -deinstall -home $ORACLE_HOME
本质是调起 deinstall,流程同上。旧习惯里还有图形界面卸载:执行 ./runInstaller,在欢迎页右下角点"卸载产品(Deinstall Products)",勾选要卸载的 home。这种方式只卸软件文件,不动数据库文件和 oratab,适合保留数据只升级软件的中间步骤。
五、手工清理完整清单
deinstall 偶尔也有漏网之鱼,以下清单按顺序执行,适合彻底重装的场景。以下命令除特别说明外都切 root 执行。
动手前先看总览,清理位置一共七类:
| 位置 | 内容 | 处理方式 |
|---|---|---|
| /u01/app/oracle | 软件家目录、数据文件、诊断日志 | rm -rf |
| /u01/app/oraInventory | Central Inventory 注册信息 | rm -rf |
| /etc/oraInst.loc | inventory 位置声明 | rm -f |
| /etc/oratab | 实例与 home 对照表 | 按行删除 |
| /etc/oracle | ocr.loc 等服务注册信息 | rm -rf |
| /usr/local/bin | dbhome、oraenv、coraenv 脚本 | rm -f |
| 内核 IPC | 共享内存段、信号量 | ipcrm 释放 |
/tmp 与 /var/tmp 下的 .oracle、OraInstall* 属于第八类临时残留,一并处理。下面逐项展开。
5.1 停库、停监听
bash
su - oracle
lsnrctl stop
sqlplus / as sysdba <<'EOF'
shutdown immediate;
exit;
EOF
5.2 杀残留进程
bash
ps -ef | grep $ORACLE_HOME | grep -v grep
kill -9 <上面列出的PID>
5.3 删除软件与数据目录
bash
rm -rf /u01/app/oracle
rm -rf /u01/app/oraInventory
如果 /u01 专门划给 Oracle,直接 rm -rf /u01/app 更省事。
5.4 清理 inventory 配置与 oratab
bash
rm -f /etc/oraInst.loc
sed -i '/^orcl:/d' /etc/oratab
rm -rf /etc/oracle
- /etc/oraInst.loc:Central Inventory 的位置声明,删除后重装会自动重建
- /etc/oratab:实例与 ORACLE_HOME 对照表,按 SID 前缀删行
- /etc/oracle:存放 ocr.loc 等 Oracle 服务注册信息
5.5 清理 /usr/local/bin 下的切换脚本
bash
ls -l /usr/local/bin/dbhome /usr/local/bin/oraenv /usr/local/bin/coraenv 2>/dev/null
rm -f /usr/local/bin/dbhome /usr/local/bin/oraenv /usr/local/bin/coraenv
5.6 清理临时文件
bash
rm -rf /tmp/OraInstall* /tmp/.oracle /var/tmp/.oracle
rm -rf /home/oracle/deinstall /home/oracle/oraInstallerLogs 2>/dev/null
/tmp/.oracle 里是实例运行期的 socket 文件,不删可能影响下次安装。
5.7 释放共享内存段与信号量
bash
ipcs -m | grep -i oracle
ipcs -s | grep -i oracle
有输出则逐个释放:
bash
ipcrm -m <shmid>
ipcrm -s <semid>
批量处理脚本:
bash
for id in $(ipcs -m | awk '/oracle/{print $2}'); do ipcrm -m $id; done
for id in $(ipcs -s | awk '/oracle/{print $2}'); do ipcrm -s $id; done
消息队列同理:ipcs -q | grep -i oracle 后 ipcrm -q <msqid>。
5.8 删除用户与组(可选)
确认这台机器不再跑 Oracle 后:
bash
userdel -r oracle
groupdel dba
groupdel oper 2>/dev/null
groupdel oinstall
如果马上要重装,保留用户和组,省去重建步骤。
重装前确认 oracle 用户的环境变量指向新规划的路径:旧 ORACLE_HOME 已删除,残留的旧变量会在安装和启动时造成路径混淆。
六、清理后的验证(重装前检查)
逐项过一遍,全部满足再启动新的安装:
bash
# inventory 声明已不存在,或指向的目录为空
ls -l /etc/oraInst.loc 2>/dev/null
# oratab 无旧条目(或文件已不存在)
cat /etc/oratab 2>/dev/null
# 共享内存与信号量无 oracle 残留
ipcs -m | grep -i oracle
ipcs -s | grep -i oracle
# 软件目录已清空
ls /u01/app 2>/dev/null
# 切换脚本已删除
ls /usr/local/bin/oraenv 2>/dev/null
# oracle 用户环境正常(保留用户时)
id oracle
su - oracle -c "echo \$ORACLE_HOME"
# 空间与基础环境
df -h /u01 /tmp
getenforce
六项检查均无残留输出即干净。之后按 03 篇重新准备环境、按 05 篇的排错思路走安装,首步安装会自动重建 Central Inventory 并生成新的 /etc/oraInst.loc。
如果只是 inventory 损坏、软件和数据都想保留,单独重建 inventory 即可,不必整体卸载,这是另一条更轻的路径。
七、要点总结
- 卸载优先用
$ORACLE_HOME/deinstall/deinstall,静默两步:-checkonly生成响应文件再-paramfile执行 - 手工清理清单:停库停监听 → 杀进程 → 删 /u01 → /etc/oraInst.loc、/etc/oratab、/etc/oracle → /usr/local/bin 三个脚本 → /tmp/.oracle → ipcs 释放内存段信号量 → 视需要删用户组
- 共享内存和信号量是最容易被漏掉的两项,重装前务必
ipcs -m、ipcs -s检查 - 重装前跑一遍第六节的检查清单,比装到一半报错再回头排查省时间