如何在Oracle RAC集群中安全删除节点?

来源:网站建设教程作者:香港程序员头衔:程序员
导读:本期聚焦于香港程序员创作的《如何在Oracle RAC集群中安全删除节点?》,敬请观看详情。从集群中移除节点并不是简单地把服务器关机了事。如果跳过OCR清理或节点应用移除,集群里会残留陈旧的节点注册信息,轻则影响后续扩容,重则导致CRS启动异常。实际操作中,删除节点需要遵循“停止服务、更新清单、清除注册、卸载软件”的顺序。首先在目标节点停止数据库实例和节点应用,并在保留节点上用DBCA或srvctl删除实例定义;然后通过OUI的runInstaller -updateNodeList刷新集群节点列表,再执行crsctl delete node -n将节点从OCR中彻底剔除;接着清理VIP、监听器等节点应用,最后在删除节点上卸载Oracle软件。整个过程涉及root和oracle两个用户权限,任何一个环节遗漏都可能让RAC处于不一致状态。建议操作前备份OCR和集群配置,并在维护窗口内执行。

在Oracle RAC集群里移除节点,不是把机器下架那么简单。OCR、节点应用、Inventory三处信息必须同步清理,否则集群中会留下陈旧条目,轻则影响后续扩容,重则导致CRS启动异常。常见做法是先在目标节点停止服务,再在保留节点上执行节点剔除,最后完成卸载与验证。以下内容以一个两节点RAC环境为例,假设保留节点为rac1,待删除节点为rac2,数据库名为orcl。

如何在Oracle RAC集群中安全删除节点?

删除节点本质上需要完成四件事:停止并移除数据库实例、从OCR中删除节点注册、清理节点应用配置、卸载目标节点上的Oracle软件。整个过程涉及oracle和root两个操作系统用户,而且顺序不能乱。尤其是crsctl delete node这一步,必须等实例和节点应用停止后再执行,否则可能报资源占用错误。

一、删除节点前的准备与风险评估

任何变更操作都必须先评估风险。删除RAC节点会影响集群的高可用性,如果当前剩余节点负载已经较高,删节点后可能导致单点过载。因此,建议在业务低峰期操作,并提前确认剩余节点硬件资源足够承载全部负载。

操作前需要备份OCR和集群配置。可以使用ocrconfig -manualbackup或者自动备份,同时记录当前节点列表和网络配置。查看OCR备份命令为ocrconfig -showbackup,确认最近备份可用。还要检查数据库归档、监听、VIP等是否有绑定在待删除节点上的对象。

待删除节点上的数据库实例和节点应用必须彻底停止,包括VIP、监听、GSD、ONS等。某些版本中ASM实例也可能需要特殊处理。建议先通过srvctl status database -d orcl和crsctl stat res -t确认资源分布,避免误操作到保留节点。

二、执行节点删除的核心步骤

第一步是在待删除节点rac2上停止数据库实例和节点应用。使用oracle用户执行以下命令,确保目标实例没有活动会话后再停止。

# 在rac2上停止数据库实例
srvctl stop instance -d orcl -n rac2
# 停止节点应用(VIP、GSD、ONS等)
srvctl stop nodeapps -n rac2

如果节点上配置了独立监听,也需要用lsnrctl stop或者netca删除监听。停止完成后,可以在保留节点上用crsctl stat res -t查看资源是否已经不在rac2上运行。

第二步是更新Oracle软件的节点列表。在保留节点rac1上以oracle用户运行OUI的updateNodeList命令,将集群节点列表改为只包含保留节点。这一步非常关键,因为Inventory中如果还记录rac2,后续打补丁或安装时会出现节点不一致错误。

# 在保留节点rac1上执行,更新节点列表
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac1}" LOCAL_NODE=rac1

第三步是从OCR中删除节点。这一步需要root权限,在保留节点rac1上执行crsctl delete node命令。该命令会清理OCR中与rac2相关的条目,并更新集群配置。

# 以root用户在保留节点rac1上执行
crsctl delete node -n rac2

此命令通常需要几分钟,完成后可以检查返回信息确认节点已删除。如果报错提示节点仍在运行,说明前面停止服务的步骤没有执行完整。

第四步是移除节点应用。使用oracle用户在保留节点上执行srvctl remove nodeapps,将VIP、监听等注册信息从OCR中删除。有些版本还需要手动删除监听器和网络配置。

# 在保留节点rac1上执行
srvctl remove nodeapps -n rac2

第五步是卸载待删除节点上的Oracle软件。回到rac2,用Oracle Universal Installer的deinstall工具或者运行$ORACLE_HOME/deinstall/deinstall卸载数据库软件和Clusterware软件。卸载顺序建议先卸载数据库实例,再卸载Grid Infrastructure。对于19c及以上版本,可以使用gridSetup.sh的删除选项或者直接使用deinstall。

三、删除后的验证与常见问题处理

节点删除后,必须在保留节点上进行全面验证。首先查看集群资源状态,确认所有资源都只运行在保留节点上,不存在空跑或未知状态。

crsctl check cluster -all
crsctl stat res -t
srvctl config database -d orcl

如果crsctl stat res -t的输出中还有rac2相关条目,可能说明OCR清理不彻底。常见原因是没有按顺序执行crsctl delete node,或者srvctl remove nodeapps失败。此时可以尝试重新执行对应命令,并查看集群日志。

另一个常见问题是Inventory不一致。在保留节点上执行opatch lsinventory时,如果仍然看到rac2的组件信息,需要再次运行runInstaller -updateNodeList并指定正确的CLUSTER_NODES值。注意该命令必须在所有保留节点上分别执行,不能只在一台节点操作。

删除节点后,数据库初始化参数中与实例相关的配置也需要检查。比如cluster_database_instances参数可能包含已删除实例的数量,需要手动调整。可以通过show parameter cluster_database_instances查看并更新。此外,如果使用了Oracle RAC的service,需要确认service没有指向已删除节点。

最后,建议删除节点后重启一次保留节点的CRS,以验证集群能够正常启动。实际操作中遇到过删除节点后CRS无法正常启动的情况,多数是因为OCR中残留条目导致。如果遇到此类问题,可以使用ocrcheck检查OCR完整性,必要时从备份恢复。

Oracle RAC删除节点crsctl delete node修改时间:2026-09-29 15:16:20

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0929/63449.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。