在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

相关推荐

  • 如何快速找到Java可执行文件路径在哪

    在Windows系统中使用where java命令,在Linux/macOS系统中使用which java或command -v java命令,可快速定位Java可执行文件(如java.exe或java)的安装路径。

    2025年7月19日
    15300
  • Linux Mint如何联网?设置步骤、故障排查与常见问题解决指南

    Linux Mint作为一款基于Ubuntu的友好型Linux发行版,其网络连接功能依托强大的NetworkManager工具,支持有线、无线及多种网络协议的自动配置,用户可通过图形界面或命令行轻松实现联网,以下是详细的联网步骤及常见问题解决方法,有线网络连接有线连接是Linux Mint中最稳定的方式,通常插……

    2025年8月26日
    13200
  • 如何启用和关闭SELinux?

    SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)主导开发的Linux安全模块,通过强制访问控制(MAC)机制增强系统安全性,防止未授权的访问和操作,在Linux系统中,SELinux有三种运行模式:enforcing(强制模式,违规操作会被阻止并记录日志)、permi……

    2025年8月25日
    13500
  • Ubuntu升级失败如何简单解决?

    使用 mail 命令(简单文本邮件)mail 是最基础的命令行工具,适合快速发送文本内容,安装与配置# CentOS/RHELsudo yum install mailx发送邮件示例echo "邮件正文" | mail -s "主题" recipient@example……

    2025年7月17日
    15100
  • Makefile中目标依赖命令如何协作?

    在 Linux 下编写和使用 Makefile 的完整指南Makefile 的核心价值Makefile 是 Linux 开发中的自动化构建工具,通过定义依赖关系和构建规则实现:高效编译:仅重新编译修改过的文件(增量编译)跨平台兼容:同一脚本在 GCC/Clang 等环境通用复杂项目管理:支持多目录、多目标的大型……

    2025年6月20日
    16000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信