在Linux系统中如何彻底卸载Oracle数据库并清理所有残留?

在Linux系统中卸载Oracle数据库需要谨慎操作,涉及服务停止、文件清理、用户组删除等多个步骤,不同版本的Oracle(如11g、12c、19c等)和Linux发行版(如RHEL、Ubuntu等)可能存在差异,但核心流程基本一致,以下是详细的卸载步骤及注意事项,确保彻底清理Oracle相关组件,避免残留文件影响系统稳定性。

linux 如何卸载oracle

卸载前准备工作

  1. 备份数据
    卸载会删除所有数据库文件、配置及数据,务必提前通过expdp/impdp或RMAN备份数据库,防止数据丢失。
  2. 确认依赖服务
    检查系统是否有其他应用依赖Oracle(如中间件、第三方软件),避免卸载导致业务中断。
  3. 记录安装信息
    记录Oracle的安装路径(如$ORACLE_HOME)、数据文件位置(如$ORACLE_BASE/oradata)、用户组信息(如oinstall、dba)等,便于后续清理。
  4. 停止Oracle相关服务
    确保所有Oracle进程已停止,避免卸载时文件被占用。

停止Oracle服务

停止监听器

su - oracle  # 切换到oracle用户
lsnrctl stop  # 停止监听器

停止数据库实例

根据数据库类型(如RAC、单实例)执行不同命令:

  • 单实例:
    sqlplus / as sysdba
    SQL> shutdown immediate;  # 立即关闭数据库(推荐,避免数据丢失)
    SQL> exit

停止OEM(Oracle Enterprise Manager)

若使用OEM管理,需停止其控制台:

emctl stop dbconsole  # 11g及之前版本
emctl stop em  # 12c及之后版本

检查并强制终止残留进程

ps -ef | grep oracle  # 查找Oracle相关进程
kill -9 <进程ID>  # 强制终止残留进程(如监听器、PMON等)

使用Oracle安装程序卸载

若通过OUI(Oracle Universal Installer)安装,优先使用其卸载功能,确保核心组件被正确移除。

进入OUI界面

su - root  # 切换到root用户
cd /oracle/product/11.2.0/dbhome_1/runInstaller  # 根据实际ORACLE_HOME路径修改
./runInstaller  # 启动OUI(图形界面,需X11转发)

执行卸载步骤

  • 在OUI中选择“卸载产品”,勾选要卸载的Oracle Home(如dbhome_1)。
  • 根据提示确认卸载,等待程序自动删除核心文件(如$ORACLE_HOME下的可执行文件、库文件等)。
  • 卸载完成后,OUI会提示执行脚本(如root.sh),按提示操作以清理系统级配置。

验证OUI卸载结果

grep -i oracle /etc/oratab  # 检查是否仍有Oracle实例注册
ls -la /etc/oraInst.loc  # 检查安装记录文件是否存在(若存在需手动删除)

手动清理残留文件

OUI卸载可能不彻底,需手动清理以下内容:

删除Oracle用户和组

su - root
groupdel oinstall  # 删除安装组
groupdba  # 删除管理员组
groupdel oper  # 删除操作组(若存在)
userdel -r oracle  # 删除oracle用户及其家目录(-r表示删除家目录)

删除Oracle目录

根据安装路径删除以下目录(需确认路径是否存在):

rm -rf /oracle  # ORACLE_BASE默认路径
rm -rf /u01/app/oracle  # 自定义安装路径
rm -rf /tmp/oracle*  # 临时文件
rm -rf /var/tmp/oracle*  # 系统临时文件

清理环境变量

编辑oracle用户的配置文件(如/home/oracle/.bashrc、/home/oracle/.profile),删除以下行:

linux 如何卸载oracle

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

清理系统级配置文件

删除或注释以下文件中的Oracle相关内容:

  • /etc/oratab:数据库实例注册信息
  • /etc/oraInst.loc:OUI安装记录
  • /etc/init.d/oracle:自启动脚本(若存在)
  • /etc/rc.local:开机自启动命令(如lsnrctl start)
rm -f /etc/oratab /etc/oraInst.loc
rm -f /etc/init.d/oracle /etc/rc.d/init.d/oracle  # RHEL/CentOS
rm -f /etc/init/oracle.conf  # Ubuntu/Debian

清理监听器和网络配置

rm -rf $ORACLE_HOME/network/admin  # 监听器配置文件(如listener.ora、tnsnames.ora)
rm -rf $ORACLE_HOME/network/log  # 监听器日志
rm -rf /var/log/oracle  # 系统日志(若存在)

清理服务注册(systemd/chkconfig)

  • RHEL/CentOS 7+(systemd):
    systemctl list-unit-files | grep oracle  # 查找Oracle相关服务
    systemctl stop oracle.service  # 停止服务
    systemctl disable oracle.service  # 禁用自启动
    rm -f /etc/systemd/system/oracle.service  # 删除服务文件
    systemctl daemon-reload  # 重新加载systemd
  • 旧版本(chkconfig):
    chkconfig --del oracle  # 删除开机自启动

清理端口占用

检查Oracle常用端口(1521、1158等)是否仍被占用:

netstat -tuln | grep 1521  # 查看监听器端口
lsof -i :1521  # 查看占用端口的进程

清理残留进程和内核模块

  1. 检查残留进程

    ps -ef | grep -i oracle | grep -v grep  # 过滤Oracle进程
    kill -9 <进程ID>  # 强制终止
  2. 卸载内核模块(若安装了Oracle ASM或ODPM)

    rmmod oracleasm  # 卸载ASM模块
    lsmod | grep oracle  # 确认模块已卸载

验证卸载结果

  1. 检查文件残留

    find / -name "*oracle*" -type f 2>/dev/null  # 查找Oracle文件(谨慎删除,避免误删系统文件)
    find / -name "*ora*" -type f 2>/dev/null  # 查找Oracle相关配置文件
  2. 检查用户和组

    linux 如何卸载oracle

    id oracle  # 应提示“id: oracle: no such user”
    grep oinstall /etc/group  # 应无输出
  3. 检查环境变量

    su - oracle  # 切换到oracle用户(应失败,因用户已删除)

常见残留文件/目录清理表

类型 常见路径 清理命令
安装目录 /u01/app/oracle, /oracle rm -rf /u01/app/oracle
配置文件 /etc/oratab, /etc/oraInst.loc rm -f /etc/oratab /etc/oraInst.loc
网络配置 $ORACLE_HOME/network/admin rm -rf $ORACLE_HOME/network/admin
日志文件 /var/log/oracle, $ORACLE_HOME/log rm -rf /var/log/oracle
用户家目录 /home/oracle rm -rf /home/oracle
服务文件 /etc/systemd/system/oracle.service rm -f /etc/systemd/system/oracle.service

FAQs

问题1:卸载Oracle后,如何确认数据库实例已完全停止?

解答:
可通过以下方式检查:

  1. 进程检查:执行ps -ef | grep oracle | grep -v grep,若无输出则说明无Oracle进程。
  2. 端口检查:执行netstat -tuln | grep 1521,监听器端口1521应无监听状态。
  3. 服务检查:若使用systemd,执行systemctl status oracle.service,应显示“inactive dead”。
  4. 数据库状态:若oracle用户仍存在,可尝试sqlplus / as sysdba执行select status from v$instance;,应提示“无法连接到数据库”。

问题2:卸载过程中遇到权限不足怎么办?

解答:
权限不足通常因未使用root用户操作或文件属主错误,可通过以下方式解决:

  1. 切换root用户:执行su - root,输入密码后重新操作。
  2. 使用sudo提权:在命令前加sudo,如sudo rm -rf /u01/app/oracle。
  3. 修改文件权限:若属主为oracle用户,可执行chown -R root:root /u01/app/oracle修改属主后再删除。
  4. 检查文件占用:若删除时报“文件被占用”,可通过lsof <文件路径>查看占用进程,终止后重试。

若仍无法解决,可检查/etc/sudoers文件配置,确保当前用户有sudo权限。

通过以上步骤,可彻底卸载Linux系统中的Oracle数据库,避免残留文件影响系统性能,操作前务必备份数据,并严格按照步骤执行,防止误删关键系统文件。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20472.html

赞 (0)
酷番叔酷番叔
上一篇 2025年8月30日 21:15
下一篇 2025年8月30日 21:32

相关推荐

  • 为什么越喜欢越不敢主动联系?

    在Linux系统中,修改hosts文件是管理本地域名解析的常用操作,可用于屏蔽网站、测试服务器或绕过DNS,以下是详细步骤和注意事项,确保操作安全有效:hosts文件的作用hosts文件位于/etc/hosts,优先级高于DNS解析,格式为:IP地址 域名127.0.0.1 localhost192.168.1……

    2025年6月27日
    27200
  • Linux端口占用?快速解决强制绑定问题

    释放被占用的端口(强制解除占用)当端口被其他进程占用时,需终止占用进程:查找占用进程sudo lsof -i :端口号 # 如 sudo lsof -i :80# 或sudo netstat -tulnp | grep :端口号输出中记录 PID(进程ID),终止进程sudo kill -9 PID # 强制终……

    2025年7月19日
    34300
  • Linux如何将文件移至移动硬盘?

    在Linux系统中,将文件移动到移动硬盘是日常操作中常见的需求,涉及设备识别、挂载、文件传输及安全卸载等步骤,本文将详细介绍完整操作流程、常用命令及注意事项,帮助用户高效完成文件迁移,准备工作:识别与挂载移动硬盘移动硬盘在Linux中通常被识别为块设备(如/dev/sdb、/dev/sdc等),需先确认设备名并……

    2025年10月3日
    37400
  • linux 虚拟机如何退出全屏显示

    Linux 虚拟机中,通常可以按 Ctrl + Alt + Enter

    2025年8月17日
    22200
  • Linux下怎样让鼠标光标消失?

    方法1:使用命令行工具 unclutter(推荐)原理:unclutter 是一个轻量级后台工具,当鼠标静止时自动隐藏光标,移动时恢复显示,步骤:安装工具(支持Debian/Ubuntu、Fedora等主流发行版):sudo apt install unclutter # Debian/Ubuntusudo d……

    2025年7月28日
    35200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信