游乐游手机版
首页/数据库/文章详情

如何卸载RAC集群_deinstall工具彻底清理Grid与DB软件

时间:2026-04-26 14:28
Oracle RAC 卸载:那些脚本不会告诉你的关键步骤 说到卸载Oracle RAC,很多人第一反应是找到deinstall脚本,然后一键回车。但现实往往没那么简单。直接运行脚本,很可能在某个环节卡住,或者看似卸载成功,重装时却遇到各种“灵异”错误。这背后的原因,恰恰在于自动化工具无法覆盖所有的手

Oracle RAC 卸载:那些脚本不会告诉你的关键步骤

说到卸载Oracle RAC,很多人第一反应是找到deinstall脚本,然后一键回车。但现实往往没那么简单。直接运行脚本,很可能在某个环节卡住,或者看似卸载成功,重装时却遇到各种“灵异”错误。这背后的原因,恰恰在于自动化工具无法覆盖所有的手动清理和状态检查。下面就来拆解几个核心环节,看看如何彻底、干净地移除一个RAC环境。

deinstall 脚本能不能直接卸掉整个 RAC?

答案是:不能指望一锤子敲完。Oracle的deinstall工具采用的是分层卸载逻辑,它并不会自动判断“先删数据库还是先删Grid”,更不会跨用户(oraclegrid)统一执行。实际操作中,必须按照角色和顺序,手动触发两次——先用oracle用户卸载数据库软件,再用grid用户卸载Grid Infrastructure。跳过任何一层,OCR、ASM磁盘、集群服务等残留都会像埋下的地雷,导致后续重装功亏一篑。

为什么必须先停集群再跑 deinstall?

这是很多踩坑经验的起点。deinstall脚本在运行时,会调用集群就绪服务(CRS)的接口进行资源检查和清理。如果此时集群还在运行,或者资源状态异常(比如部分离线),脚本大概率会卡在“网络配置检查”或“EMCA取消配置”这类阶段。常见的报错包括CRS-4640: Oracle High A vailability Services is not running,或者脚本直接静默退出。这并非工具缺陷,而是一种保护机制。

所以,正确的姿势是:

  • 每个节点都以root用户执行:crsctl stop crs
  • 然后确认没有残留进程:ps -ef | grep -E "(ora_|d.bin|ohasd|cssd)",如果发现,果断kill -9处理。
  • 别只凭感觉判断集群停了,用crsctl check cluster -all命令验证才算数。

卸载后那些 rm -f 命令到底删什么?

deinstall脚本主要职责是清理$ORACLE_HOME目录和软件注册信息,对于系统级的痕迹,它可不会越俎代庖。而这些残留,正是新安装发生冲突的常见根源。例如,/etc/oratab里若还留着旧实例名,DBCA建库时就可能误读;/etc/init.d/ohasd如果没删干净,可能导致系统启动时自启失败甚至挂起。

因此,需要在每个节点(注意,不是只在主节点)执行以下清理:

  • 删除系统配置文件:rm -f /etc/init.d/ohasd /etc/oracle/* /etc/oraInst.loc /etc/inittab.crs /etc/ohasd
  • 清理临时通信通道:rm -rf /var/tmp/.oracle /var/tmp/* /var/tmp/.*
  • 移除软链接入口:rm -f /usr/local/bin/{dbhome,oraenv,coraenv}
  • 最后,删除安装根目录:rm -rf /u01/app/* /u01(这里的路径请务必根据你实际的$ORACLE_HOME进行调整)

ASM 磁盘和 OCR 不清,等于白卸

这是最关键的步骤之一,也最容易遗漏。deinstall脚本不会触碰ASM磁盘设备本身,更不会进行格式化。如果保留了原有的磁盘组(比如+DATA),下次安装建库时,ASM实例很可能识别出旧的磁盘组头信息,进而抛出ORA-15032ORA-15017这类错误,或者错误挂载旧的数据文件。

彻底清理的流程如下:

  • 首先列出ASM磁盘:oracleasm listdisks
  • 逐个删除磁盘注册:oracleasm deletedisk DISK1
  • 关键一步:物理清零dd if=/dev/zero of=/dev/mapper/vg_ocr-lv_ocr bs=1M count=100(请将路径替换为你真实的ASM设备路径)
  • 如果存储硬件支持,直接在SAN或NAS存储层面对LUN进行重新初始化,这通常比在操作系统层用dd命令更为彻底。

同样,存放OCR和Voting Disk的磁盘也必须清理。这一步如果漏掉,即使运行rootcrs.pl -deconfig -force也可能失败。后果就是,重新安装Grid时,安装程序会卡在“Creating OCR backup”这一步无限等待。

说到底,卸载RAC更像是一次精密的外科手术,而非简单的拆除。自动化脚本提供了主要框架,但那些边边角角、深藏不露的“组织”,还得靠手动工具一点点剥离干净。遵循分步、分角色、彻底清理的原则,才能为下一次的全新安装铺平道路。

来源:https://www.php.cn/faq/2307356.html
上一篇Oracle RAC如何添加ASM磁盘?在线扩容磁盘组而不中断 下一篇如何防止SQL注入利用错误信息_关闭SQL详细报错提示
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis 7.0增量AOF重写RDB前导码配置详解
数据库 · 2026-07-02

Redis 7.0增量AOF重写RDB前导码配置详解

先说一个几乎所有人都踩过的典型误区:很多人把 aof-use-rdb-preamble yes 当作开启“增量重写”的开关。实际上,这个配置只干了一件事——让重写后的 AOF 文件头部带上 RDB 快照。它解决的是加载速度问题,跟“增量重写”本身的概念压根不是一回事。真正的增量重写,依赖的是 Red

在Python Tornado异步框架中安全执行SQL命令的方法与最佳实践
数据库 · 2026-07-02

在Python Tornado异步框架中安全执行SQL命令的方法与最佳实践

直接在Tornado里用SQLAlchemy同步执行SQL,结果就是阻塞IOLoop,所谓“异步框架里写同步数据库代码”,等于白搭。安全执行的关键不是“怎么写SQL”,而是“怎么不卡住事件循环”。 为什么不能在RequestHandler里直接调用session execute() 因为sessio

利用SQL触发器实现在INSERT数据时自动同步到审计表
数据库 · 2026-07-02

利用SQL触发器实现在INSERT数据时自动同步到审计表

先说结论:可以用触发器把 INSERT 数据同步到审计表,但必须用 AFTER INSERT,并且审计表的字段顺序、类型、字符集得和源表严格一致。否则,轻则写入错位、数据截断,重则直接报错、丢数据。下面把这些坑一个一个掰开说。 能,但必须用 AFTER INSERT,且审计表字段顺序、类型、字符集要

如何用SQL编写按不同工作日统计员工出勤率
数据库 · 2026-07-02

如何用SQL编写按不同工作日统计员工出勤率

在实际业务中,统计不同工作日的出勤率是HR系统里的高频需求。如果直接按日期函数分组,很容易掉进语言环境、索引失效或分母口径的坑里。下面就来拆解具体的实现要点。 必须用 CASE WHEN 将日期映射为固定 weekday 标签(如 Mon )再分组,避免语言环境导致的分组断裂;需过滤 DOW IN

Spring Boot 3动态拼接SQL为何引发严重安全漏洞
数据库 · 2026-07-02

Spring Boot 3动态拼接SQL为何引发严重安全漏洞

SQL注入漏洞的核心成因,本质上是因为用户输入直接参与了SQL语句的字符串拼接,而未采用参数化绑定机制。在MyBatis中使用${}、QueryWrapper中调用apply()与last()、JPA的@Query注解进行拼接等操作,都会绕过PreparedStatement的安全防护。动态字段必须