Oracle 卸载与清理详解

Oracle 卸载与清理详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

正确卸载 Oracle 是维护重要环节[1]:

方式

  • deinstall 工具
  • 手动卸载
  • 完全清理

详细见:Oracle 卸载与清理


2. 准备

2.1 备份

# 数据备份
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y

# RMAN 备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

2.2 停服务

# 停数据库
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> EXIT

# 停监听
lsnrctl stop

# 停 EM
emctl stop dbconsole

# 停 GI(如适用)
crsctl stop cluster -all
crsctl stop crs

详细见:Oracle 启动关闭流程


3. deinstall 工具

3.1 单实例 DB

cd $ORACLE_HOME/deinstall
./deinstall

3.2 交互

- 数据库名
- SID
- 监听器
- 确认

3.3 静默

# 生成响应文件
./deinstall -checkonly

# 静默卸载
./deinstall -paramfile /tmp/deinstall.rsp

3.4 GI

su - grid
cd $ORACLE_HOME/deinstall
./deinstall

4. 手动卸载

4.1 停服务

ps -ef | grep ora_
ps -ef | grep tns
kill -9 <pid>

4.2 删除 ORACLE_HOME

rm -rf $ORACLE_HOME

4.3 删除 ORACLE_BASE

rm -rf $ORACLE_BASE

4.4 删除 oraInventory

rm -rf /u01/app/oraInventory

4.5 /etc/oratab

vi /etc/oratab
# 删除相关行

4.6 /etc/oraInst.loc

rm /etc/oraInst.loc

4.7 /usr/local/bin

rm /usr/local/bin/oraenv
rm /usr/local/bin/dbhome
rm /usr/local/bin/coraenv

4.8 用户与组(可选)

userdel -r oracle
userdel -r grid
groupdel oinstall
groupdel dba

4.9 目录

rm -rf /u01
rm -rf /tmp/.oracle
rm -rf /var/tmp/.oracle
rm -rf /etc/oracle

5. RAC 卸载

5.1 删除数据库

srvctl remove database -db orcl

5.2 删除 ASM Disk Group

sqlplus / as sysasm
DROP DISKGROUP DATA INCLUDING CONTENTS;
DROP DISKGROUP FRA INCLUDING CONTENTS;
DROP DISKGROUP OCR INCLUDING CONTENTS;

5.3 卸载 GI

su - grid
cd $GI_HOME/deinstall
./deinstall

5.4 节点

# 每个节点
./deinstall

5.5 ASM Disk

oracleasm deletedisk OCR1
oracleasm deletedisk DATA

6. Windows 卸载

6.1 服务

sc stop OracleServiceORCL
sc delete OracleServiceORCL
sc stop OracleOraDB19HomeTNSListener
sc delete OracleOraDB19HomeTNSListener

6.2 注册表

reg delete "HKLM\SOFTWARE\Oracle" /f
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\Oracle*" /f

6.3 目录

rmdir /s /q C:\app\oracle
rmdir /s /q C:\Program Files\Oracle

7. 清理残留

7.1 进程

ps -ef | grep -E 'oracle|ora_|tns' | grep -v grep
kill -9 <pid>

7.2 共享内存

ipcs -m | grep oracle
ipcrm -m <shmid>

7.3 信号量

ipcs -s | grep oracle
ipcrm -s <semid>

7.4 端口

netstat -tlnp | grep 1521

8. ASM 清理

8.1 ASMLib

oracleasm deletedisk OCR1
oracleasm deletedisk DATA
oracleasm deletedisk FRA

# 卸载
yum remove oracleasmlib oracleasm-support

8.2 ASMFD

asmcmd afd_unlabel OCR1
asmcmd afd_unlabel DATA

8.3 UDEV

rm /etc/udev/rules.d/99-oracle-asmdevices.rules
udevadm control --reload-rules

9. 网络清理

9.1 监听器

rm $ORACLE_HOME/network/admin/listener.ora
rm $ORACLE_HOME/network/admin/tnsnames.ora

9.2 防火墙

firewall-cmd --remove-port=1521/tcp --permanent
firewall-cmd --reload

9.3 /etc/hosts

# 删除 Oracle 相关条目
vi /etc/hosts

10. 用户清理

10.1 oracle

userdel -r oracle

10.2 grid

userdel -r grid

10.3 组

groupdel oinstall
groupdel dba
groupdel oper
groupdel asmadmin
groupdel asmdba
groupdel asmoper

11. 验证

11.1 文件

ls /u01
ls /etc/ora*
ls /usr/local/bin/ora*
find / -name "*oracle*" -type f 2>/dev/null

11.2 进程

ps -ef | grep -E 'oracle|ora_' | grep -v grep

11.3 内存

ipcs -a | grep oracle

11.4 用户

id oracle
id grid

12. 常见坑与排错

12.1 删除失败

- 进程占用
- 先停服务
- fuser

12.2 残留共享内存

ipcs -m
ipcrm -m <id>

12.3 监听器残留

ps -ef | grep tns
kill -9

12.4 ASM Disk 残留

oracleasm querydisk -p ******
oracleasm deletedisk ...

13. 最佳实践

  1. 备份先:应急
  2. deinstall 工具:官方
  3. 停服务:完整
  4. 清理残留:彻底
  5. 验证:确认
  6. 用户/组:可选
  7. RAC 节点逐一:顺序
  8. ASM Disk 清理:彻底
  9. 共享内存:清理
  10. 文档化:流程

14. 参考资料

[1] Oracle Database Installation Guide 19c, “Deinstalling Oracle Database” https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/deinstalling-oracle-database.html