将Oracle Linux 9.6(OL 9.6)上已部署的Oracle 19c RAC架构完全清理并恢复到“最干净的初始状态”,需要遵循先上层(Database)、后下层(Grid Infrastructure)、再环境与内核配置的逆向彻底卸载流程。
一、 卸载与清理步骤
1.彻底清理数据库与集群软件
为了防止残留进程锁住共享存储,请严格按照以下顺序执行。在节点1(或其中任一节点)执行即可,它会自动调用SSH清理其余节点:
1)删除数据库(以oracle用户执行)
# 删除数据库
[oracle@rac1 ~]$ dbca -silent -deleteDatabase -sourceDB racdb
# dbca -silent -deleteDatabase -sourceDB <数据库实例名/DB_UNIQUE_NAME>
# 验证是否删除成功
[oracle@rac1 ~]$ srvctl status database -d racdb
2)卸载数据库软件(在rac1节点执行)
[oracle@rac1 ~]$ cd $ORACLE_HOME/deinstall
[oracle@rac1 deinstall]$ ./deinstall
# 根据提示输入相应信息进行卸载
3)卸载 Grid Infrastructure(以grid用户执行)
进入GI安装目录的deinstall路径下执行脚本。它会清除节点上的所有集群配置:
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd $ORACLE_HOME/deinstall
[grid@rac1 deinstall]$ ./deinstall
注意:执行过程中会弹出一个提示,要求以root用户在所有节点上运行指定的shell脚本命令,请务必开启另一个终端以root权限去执行,执行完后再回到当前窗口敲回车。
4)清理系统残留目录与配置文件(所有节点以root执行)
卸载工具通常无法100%擦除所有文本痕迹,必须手动强制清理
1)清理Oracle体系核心目录:
[root@rac1 ~]# rm -rf /u01/app/oracle
[root@rac1 ~]# rm -rf /u01/app/grid
[root@rac1 ~]# rm -rf /u01/app/oraInventory
2)清理系统注册与配置文件:
[root@rac1 ~]#rm -rf /etc/oratab
[root@rac1 ~]#rm -rf /etc/oraInst.loc
[root@rac1 ~]#rm -rf /etc/oracle
[root@rac1 ~]#rm -rf /opt/ORCLfpps
[root@rac1 ~]#rm -rf /var/tmp/.oracle
[root@rac1 ~]#rm -rf /tmp/OraInstall*
[root@rac1 ~]#rm -rf /tmp/.oracle
[root@rac1 ~]#rm -rf /etc/init.d/init.ohasd
二、恢复操作系统环境
1. 恢复伪装环境变量(伪装 OL8)(如果有配置)
由于Oracle 19c原生并不官方支持Oracle Linux 9.x系列安装,之前可能使用了修改os-release 或设置CV_ASSUME_DISTID环境变量等伪装手段。如果要达到最干净的状态,需要将其还原:
1)还原/etc/os-release模板:
备份过该文件,请直接覆盖恢复。如果没有,请编辑/etc/os-release和/etc/oracle-release,将其中的版本号改回您原本的9.6。
[root@rac1 ~]# cp /etc/oracle-release.bak /etc/oracle-release
[root@rac1 ~]# cp /etc/redhat-release.bak /etc/redhat-release
2)清理环境变量伪装:
检查并删除/home/grid/.bash_profile和/home/oracle/.bash_profile中的如下声明:
# 删除此行或将其注释
export CV_ASSUME_DISTID=OEL8.5
2. 还原系统scp命令(撤销外壳脚本修改)(如果有配置)
如果之前为了绕过Java Bug修改了系统的scp二进制文件,请务必将其还原为官方原生状态。
1)在rac1和rac2上以root用户执行:
if [ -f /usr/bin/scp.orig ]; then
mv -f /usr/bin/scp.orig /usr/bin/scp
chmod 755 /usr/bin/scp
echo "SCP 命令已成功还原为系统原生状态"
fi
3. 彻底清空SSH互信与密钥缓存(双节点执行)(如果有配置)
1)清理grid和oracle用户的SSH钥匙串(所有节点):
[root@rac1 ~]# rm -rf /home/oracle/.ssh/*
[root@rac1 ~]# rm -rf /home/grid/.ssh/*
2)清理系统的已知主机记录及临时授权(所有节点):
[root@rac1 ~]# rm -rf /root/.ssh/*
4. 恢复系统加密策略(Crypto Policies)与FIPS(如果有配置)
如果您之前为了兼容旧版Oracle降低了系统的安全策略,现在将其改回Oracle Linux 9.6的标准默认状态。
1)在rac1和rac2上以root用户执行:
# 还原加密策略为系统默认的高强度模式
[root@rac1 ~]# update-crypto-policies --set DEFAULT
[root@rac1 ~]# update-crypto-policies --show
# 恢复SSH服务默认配置(删除在末尾添加的+ssh-rsa允许规则)
# 建议手动vi /etc/ssh/sshd_config删掉末尾的"PubkeyAcceptedKeyTypes +ssh-rsa"
[root@rac1 ~]# systemctl restart sshd
2)检查并根据您最初的状态决定是否恢复FIPS(通常保持disable即可,无需刻意恢复,否则会阻断很多基础软件)
[root@rac1 ~]# fips-mode-setup --check
[root@rac1 ~]# fips-mode-setup --enable (注:生产环境一般也不建议开启)
三、清理共享存储磁盘
在重新部署时,Grid检查如果发现磁盘上残留有之前的ASM头部信息,会直接报磁盘已被占用的错误。
1.在任意一个节点(例如rac1)上,以root用户对您所有的共享磁盘(DATA,RECO,CRS 等)灌入零字节,彻底擦除ASM元数据:
# 擦除规划用于OCR和DATA的所有共享磁盘前100M空间
[root@rac1 ~]# dd if=/dev/zero of=/dev/dm-5 bs=1M count=100 conv=notrunc
[root@rac1 ~]# dd if=/dev/zero of=/dev/dm-6 bs=1M count=100 conv=notrunc
# 执行完后,在rac2节点上运行以下命令强制让系统重新扫描磁盘阵列
# (若是多路径环境执行multipath -r,普通磁盘执行partprobe)
[root@rac2 ~]# multipath -r
夜雨聆风