删除 Linux 上的 Oracle 数据库,如何彻底卸载 Linux 系统中的 Oracle 数据库?,如何在Linux上彻底卸载Oracle数据库?

04-19 1677阅读

前言说明

在Linux环境下完整卸载Oracle数据库需要系统操作,任何残留文件都可能导致后续安装失败或系统异常,本指南涵盖从前期准备到后期验证的全流程,适用于11g至19c主流版本。

卸载前的关键准备

1 数据备份方案

  • 全量备份建议
    • 使用RMAN执行热备份:RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
    • 导出关键元数据:expdp system/密码 schemas=重要用户 directory=DATA_PUMP_DIR dumpfile=meta.dmp logfile=expdp.log

删除 Linux 上的 Oracle 数据库,如何彻底卸载 系统中的 数据库?,如何在Linux上彻底卸载Oracle数据库? 第1张

2 环境检查清单

# 验证环境变量
echo $ORACLE_HOME && echo $PATH | tr ':' '\n' | grep oracle
# 检查安装版本
sqlplus -v || cat $ORACLE_HOME/inventory/ContentsXML/comps.xml | grep version

3 会话管理策略

-- 强制断开所有会话(12c+适用)
ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;
ALTER SYSTEM QUIESCE RESTRICTED;
SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' 
FROM v$session WHERE username IS NOT NULL;

标准化卸载流程

1 服务终止规范

# 使用tee命令记录操作日志
{
  lsnrctl stop | tee -a /tmp/uninstall.log
  sqlplus / as sysdba <<EOF
  SET SERVEROUTPUT ON
  BEGIN
    FOR sess IN (SELECT sid,serial# FROM v$session WHERE username IS NOT NULL)
    LOOP
      EXECUTE IMMEDIATE 'ALTER SYSTEM DISCONNECT SESSION '''||sess.sid||','||sess.serial#||''' IMMEDIATE';
      DBMS_OUTPUT.PUT_LINE('Killed session: '||sess.sid);
    END LOOP;
    EXECUTE IMMEDIATE 'SHUTDOWN ABORT';
  END;
  /
EOF
} 2>&1 | tee -a /tmp/uninstall.log

2 卸载方案选择

推荐方案:官方卸载工具

# 19c+专用卸载方式
cd $ORACLE_HOME/deinstall
./deinstall -silent -paramfile ./response/deinstall.rsp \
-checkonly -tmpdir /tmp/oracle_clean

高级方案:手动彻底清除

# 安全删除脚本模板
#!/bin/bash
ORACLE_DIRS=(
  "/u01/app/oracle"
  "/u01/app/oraInventory"
  "/oradata"
  "/flash_recovery_area"
)
for dir in "${ORACLE_DIRS[@]}"; do
  if [ -d "$dir" ]; then
    echo "[WARNING] Removing $dir ..."
    find "$dir" -type f -exec shred -zu -n 3 {} \; 2>/dev/null
    rm -rf "$dir"
  fi
done

系统深度清理

1 用户与权限清理

# 安全删除用户及关联文件
userdel -r oracle && \
find / -user oracle -exec rm -rf {} + 2>/dev/null
# 清理用户组
for group in oinstall dba oper asmdba; do
  getent group $group && groupdel $group
done

删除 Linux 上的 Oracle 数据库,如何彻底卸载 系统中的 数据库?,如何在Linux上彻底卸载Oracle数据库? 第2张

2 配置文件清理增强版

# 使用正则表达式全面清理
grep -lIr "oracle" /etc/ | xargs -I{} sed -i '/ORACLE\|TNS_ADMIN\|SQLPATH/d' {}

3 内核参数复原

# 还原sysctl配置
sed -i '/kernel.shmmax\|kernel.sem\|fs.file-max/d' /etc/sysctl.conf
sysctl -p

特殊场景处理

1 ASM存储清理

# 需先卸载Grid组件
asmcmd umount -a
oracleasm listdisks | xargs -I{} oracleasm deletedisk {}
dd if=/dev/zero of=/dev/oracleasm/disks/disk1 bs=1M count=10

2 容器环境处理

# Docker专用清理命令
docker ps -a | grep oracle | awk '{print }' | xargs docker rm -fv
docker volume prune -f

验证与优化

1 卸载验证清单

# 综合验证脚本
verify_clean() {
  local errors=0
  [ $(ps -ef | grep -c [o]ra) -gt 0 ] && ((errors++))
  [ -d $ORACLE_HOME ] && ((errors++))
  ipcs -m | grep -q oracle && ((errors++))
  return $errors
}

2 系统优化建议

# 重建文件系统缓存
sync && echo 3 > /proc/sys/vm/drop_caches
# 回收磁盘空间
fstrim -av

删除 Linux 上的 Oracle 数据库,如何彻底卸载 系统中的 数据库?,如何在Linux上彻底卸载Oracle数据库? 第3张

注意事项

  1. 对于RAC环境,需先停止集群服务(crsctl stop has)
  2. 使用Oracle Restart时,需执行roothas.pl -deconfig -force
  3. 在Ubuntu等非RHEL系统上,需额外处理init.d脚本

重要提示:生产环境建议先在测试机验证卸载流程,所有删除操作前建议使用ls命令预览待删除内容,对于关键业务系统,推荐在维护窗口期进行操作。


本修订版主要改进:

  1. 增加了更多实用命令示例
  2. 优化了代码块的格式和注释
  3. 补充了容器化环境处理方案
  4. 增强了安全删除措施(如shred命令)
  5. 添加了更完善的验证机制
  6. 优化了图片与文字的配合
  7. 增加了各环节的风险提示

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]