在Linux系统中卸载Oracle数据库需要谨慎操作,涉及服务停止、文件清理、用户组删除等多个步骤,不同版本的Oracle(如11g、12c、19c等)和Linux发行版(如RHEL、Ubuntu等)可能存在差异,但核心流程基本一致,以下是详细的卸载步骤及注意事项,确保彻底清理Oracle相关组件,避免残留文件影响系统稳定性。
卸载前准备工作
- 备份数据
卸载会删除所有数据库文件、配置及数据,务必提前通过expdp
/impdp
或RMAN
备份数据库,防止数据丢失。 - 确认依赖服务
检查系统是否有其他应用依赖Oracle(如中间件、第三方软件),避免卸载导致业务中断。 - 记录安装信息
记录Oracle的安装路径(如$ORACLE_HOME
)、数据文件位置(如$ORACLE_BASE/oradata
)、用户组信息(如oinstall
、dba
)等,便于后续清理。 - 停止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
),删除以下行:
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 # 查看占用端口的进程
清理残留进程和内核模块
-
检查残留进程
ps -ef | grep -i oracle | grep -v grep # 过滤Oracle进程 kill -9 <进程ID> # 强制终止
-
卸载内核模块(若安装了Oracle ASM或ODPM)
rmmod oracleasm # 卸载ASM模块 lsmod | grep oracle # 确认模块已卸载
验证卸载结果
-
检查文件残留
find / -name "*oracle*" -type f 2>/dev/null # 查找Oracle文件(谨慎删除,避免误删系统文件) find / -name "*ora*" -type f 2>/dev/null # 查找Oracle相关配置文件
-
检查用户和组
id oracle # 应提示“id: oracle: no such user” grep oinstall /etc/group # 应无输出
-
检查环境变量
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后,如何确认数据库实例已完全停止?
解答:
可通过以下方式检查:
- 进程检查:执行
ps -ef | grep oracle | grep -v grep
,若无输出则说明无Oracle进程。 - 端口检查:执行
netstat -tuln | grep 1521
,监听器端口1521应无监听状态。 - 服务检查:若使用systemd,执行
systemctl status oracle.service
,应显示“inactive dead”。 - 数据库状态:若oracle用户仍存在,可尝试
sqlplus / as sysdba
执行select status from v$instance;
,应提示“无法连接到数据库”。
问题2:卸载过程中遇到权限不足怎么办?
解答:
权限不足通常因未使用root用户操作或文件属主错误,可通过以下方式解决:
- 切换root用户:执行
su - root
,输入密码后重新操作。 - 使用sudo提权:在命令前加
sudo
,如sudo rm -rf /u01/app/oracle
。 - 修改文件权限:若属主为oracle用户,可执行
chown -R root:root /u01/app/oracle
修改属主后再删除。 - 检查文件占用:若删除时报“文件被占用”,可通过
lsof <文件路径>
查看占用进程,终止后重试。
若仍无法解决,可检查/etc/sudoers
文件配置,确保当前用户有sudo权限。
通过以上步骤,可彻底卸载Linux系统中的Oracle数据库,避免残留文件影响系统性能,操作前务必备份数据,并严格按照步骤执行,防止误删关键系统文件。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20472.html