在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)
酷番叔酷番叔
上一篇 7小时前
下一篇 6小时前

相关推荐

  • Linux下如何查看进程编号?常用命令及操作步骤详解

    在Linux系统中,进程编号(通常指进程ID,即PID)是操作系统为每个运行中的进程分配的唯一标识符,是进程管理、调试、资源监控的基础,查看进程编号的方法多样,可通过内置命令、交互式工具或系统文件实现,以下详细介绍常用方法及具体操作,基础命令:ps查看静态进程列表ps(process status)是最常用的进……

    2025年8月22日
    700
  • NUMA的秘密是什么?

    在Linux系统中,NUMA(Non-Uniform Memory Access,非统一内存访问)是一种针对多处理器服务器的内存架构设计,旨在提升大型系统的性能,某些场景下(如特定应用程序优化或解决兼容性问题)可能需要关闭NUMA,以下是详细的操作方法和注意事项:作用:NUMA将CPU和内存划分为多个”节点……

    2025年6月25日
    2500
  • Linux星号通配符如何提升效率?

    *通配符 “ 的核心作用** 代表匹配任意长度(0个或多个)的任意字符,常用于:批量选择文件(如 .txt, .log)匹配部分文件名(如 file*.doc)结合命令执行批量操作(如删除、复制)基础用法与示例匹配所有文件ls * # 列出当前目录所有文件(不含隐藏文件)rm *.tmp # 删除所有后缀为……

    2025年7月21日
    2100
  • 如何基于Linux内核开发操作系统?关键步骤与实现方法有哪些?

    基于Linux内核开发操作系统是一个涉及内核定制、用户空间构建、系统集成的复杂过程,其核心目标是根据特定需求(如嵌入式设备、服务器、定制化桌面等)裁剪、优化并扩展Linux系统,形成满足功能、性能、资源限制要求的完整操作系统,以下是详细开发步骤及关键要点,开发环境准备开发基于Linux内核的操作系统,首先需要搭……

    2025年8月23日
    1000
  • Linux如何设置alias命令别名?

    在Linux系统中,alias(别名)是一个非常实用的功能,它允许用户为常用的复杂命令或命令组合设置简短易记的名称,从而提高命令行操作效率,ls -alF这样的命令可以简化为ll,减少重复输入和记忆负担,本文将详细介绍Linux中设置alias的方法,包括临时设置、永久配置、高级用法及注意事项,alias的基本……

    16小时前
    200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信