06-Oracle卸载与重装完整流程

文章目录

  • 一、场景切入
  • 二、卸载不干净的后果
  • [三、方式一: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 检查
  • 重装前跑一遍第六节的检查清单,比装到一半报错再回头排查省时间
相关推荐
znnnk7 小时前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
微微%8 小时前
mysql的安装和使用
数据库·mysql·mysql8安装
软件派9 小时前
MiniMax M3.1 Flash 高频业务落地实战指南
大数据·数据库·人工智能
云边云科技_云网融合10 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
泡海椒10 小时前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法
acrel710 小时前
医院用电隐患治理与节能降耗及智慧能源平台应用
网络·数据库
snow@li11 小时前
PowerDesigner 全景教程:从业务建模、表结构设计、关系管理到正向/逆向、文档输出
数据库
ss27311 小时前
PostgreSQL表级锁、行级锁、轻量级锁
数据库·postgresql·区块链
RacentCLM11 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
SelectDB11 小时前
安全评审卡了三周,我把部署形态的四种选项重新排了一遍
大数据·数据库·云原生