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

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

linux 如何卸载oracle

卸载前准备工作

  1. 备份数据
    卸载会删除所有数据库文件、配置及数据,务必提前通过expdp/impdpRMAN备份数据库,防止数据丢失。
  2. 确认依赖服务
    检查系统是否有其他应用依赖Oracle(如中间件、第三方软件),避免卸载导致业务中断。
  3. 记录安装信息
    记录Oracle的安装路径(如$ORACLE_HOME)、数据文件位置(如$ORACLE_BASE/oradata)、用户组信息(如oinstalldba)等,便于后续清理。
  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系统32位还是64位?速查

    在 Linux 系统中,确认操作系统位数(32 位或 64 位)对软件安装、驱动兼容性和性能优化至关重要,以下是 5 种权威方法,适用于所有主流 Linux 发行版(Ubuntu、CentOS、Debian 等),无需专业知识即可操作:🔍 方法 1:使用 uname 命令(推荐)步骤:打开终端(快捷键 Ctrl……

    2025年8月8日
    5100
  • Linux下如何高效解析JSON数据?

    专用工具:jq(推荐首选)jq 是专为JSON设计的轻量级命令行处理器,支持过滤、转换和格式化,安装方法:sudo apt install jq # Debian/Ubuntusudo yum install jq # CentOS/RHEL常用操作示例:提取字段值(如解析data.json中的name字段……

    2025年6月28日
    6900
  • Linux强制结束进程的必学技巧

    键盘中断:Ctrl + C(最常用)适用场景:终止当前终端中正在前台运行的命令(如卡死的脚本、持续输出的进程),操作步骤:在运行命令的终端窗口中,直接按下 Ctrl + C,系统会发送 SIGINT 信号,命令立即终止,注意:仅对当前终端的前台进程有效,可能无法强制结束某些顽固进程(需结合后续方法),挂起进程……

    2025年7月15日
    6800
  • 网站打不开是DNS的锅?

    在Linux系统中配置DNS是确保网络连接正常的关键步骤,以下将详细介绍多种配置方法,涵盖主流发行版(如Ubuntu、CentOS、Debian等),并强调安全性和最佳实践,所有操作均需root权限(使用sudo或切换root用户),DNS作用:将域名(如www.example.com)解析为IP地址(如0.2……

    2025年7月24日
    6000
  • 如何往Linux虚拟机传文件?有哪些常用方法和步骤?

    在Linux虚拟机的日常使用中,向虚拟机内传输文件是常见需求,无论是配置文件、数据集还是开发工具,都需要高效、安全的方式完成传输,根据虚拟机与宿主机的连接方式、文件大小、安全需求等不同场景,可选择多种传输方法,本文将详细介绍几种主流的文件传输方式,包括原理、操作步骤及注意事项,帮助用户根据实际情况选择最适合的方……

    2025年8月24日
    6700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信