Oracle19c集群节点故障恢复:从异常节点删除到重新加入的完整指南

张开发
2026/6/8 5:58:31 15 分钟阅读
Oracle19c集群节点故障恢复:从异常节点删除到重新加入的完整指南
1. 理解Oracle19c集群节点故障恢复的核心场景当Oracle19c RAC集群中的某个节点因硬件故障或系统崩溃导致不可用时整个集群的高可用性就会受到威胁。我曾经遇到过这样的情况凌晨三点接到报警发现生产环境中的orcl01节点突然宕机经过排查发现是存储控制器故障导致。这种情况下我们需要快速而安全地将故障节点从集群中移除并在修复后重新加入集群。节点故障通常分为两种类型临时性故障和永久性故障。对于临时性故障如网络闪断集群通常能自动恢复但对于永久性故障如硬盘损坏、主板故障就需要我们手动介入。在实际操作中我发现很多DBA容易忽略一个关键点故障节点的清理必须彻底任何残留的配置信息都可能导致后续重新加入集群时出现问题。2. 故障节点的安全删除操作流程2.1 环境检查与准备工作在开始删除故障节点前必须确保剩余的健康节点如orcl02运行正常。我通常会执行以下检查# 检查集群状态 crsctl check cluster -all # 查看资源运行情况 crsctl stat res -t # 验证ASM磁盘组状态 asmcmd lsdg重要提示如果故障节点完全无法访问我们需要在健康节点上强制删除其信息。但在此之前建议备份以下关键文件OCROracle Cluster Registry文件Voting Disk文件ASM spfile文件我曾经因为没做备份而吃过亏后来养成了操作前必备份的习惯。可以使用以下命令备份OCR# 以root用户执行 ocrconfig -manualbackup2.2 删除数据库实例信息当orcl01节点完全宕机无法恢复时我们需要从数据库层面删除其实例信息。这里有两种方法图形界面方式在健康节点上运行DBCA选择Instance Management → Delete Instance选择要删除的实例orcl1命令行方式更适合生产环境dbca -silent -deleteInstance \ -nodeName orcl01 \ -gdbName orcl \ -instanceName orcl1 \ -sysDBAUserName sys \ -sysDBAPassword your_password这个操作会禁用该实例对应的instance_number删除对应的redo log thread移除节点相关的undo表空间2.3 清理集群注册信息接下来需要从集群配置中彻底清除故障节点。这一步非常关键也是容易出错的地方# 首先停止并删除VIP资源 srvctl stop vip -i orcl01-vip srvctl remove vip -i orcl01-vip -f # 检查节点状态 olsnodes -s -t # 如果状态为unpinned需要先执行 crsctl unpin css -n orcl01 # 正式删除节点 crsctl delete node -n orcl01常见问题处理如果遇到CRS-2673: Attempting to stop ora.asm on orcl01这样的错误说明集群仍在尝试管理故障节点上的资源。这时可以添加-force参数强制删除crsctl delete node -n orcl01 -f3. 修复后的节点重新加入集群3.1 节点重新配置前的准备工作在重装操作系统后的orcl01节点上需要确保所有配置与集群中的其他节点一致。根据我的经验以下检查项必不可少网络配置检查/etc/hosts文件必须包含所有VIP和SCAN IP网络接口配置应与原节点一致确保私网和公网的MTU值一致通常为9000存储配置验证# 检查多路径配置 multipath -ll # 确认磁盘权限 ls -l /dev/oracleasm/disks/* # 验证AFD状态 afd_state系统参数一致性检查内核参数/etc/sysctl.conf用户限制/etc/security/limits.conf透明大页设置时间同步配置我通常会直接从健康节点复制这些配置文件# 从orcl02复制内核参数 scp rootorcl02:/etc/sysctl.conf /etc/ # 应用修改 sysctl -p3.2 使用addnode.sh添加节点GI软件层添加# 在健康节点(orcl02)上执行 su - grid export IGNORE_PREADDNODE_CHECKSY cd $ORACLE_HOME/addnode ./addnode.sh -silent -ignorePrereq \ CLUSTER_NEW_NODES{orcl01} \ CLUSTER_NEW_VIRTUAL_HOSTNAMES{orcl01-vip}执行过程中会提示在两个节点上分别运行root.sh脚本。特别注意在新节点上运行root.sh时如果遇到CLSR-0010错误通常是因为之前的清理不彻底需要检查并清理/var/tmp/.oracle目录。数据库软件层添加su - oracle export IGNORE_PREADDNODE_CHECKSY cd $ORACLE_HOME/addnode ./addnode.sh -silent -ignorePrereq \ CLUSTER_NEW_NODES{orcl01} \ CLUSTER_NEW_VIRTUAL_HOSTNAMES{orcl01-vip}3.3 数据库实例重建使用DBCA重新创建实例dbca -silent -addInstance \ -nodeName orcl01 \ -gdbName orcl \ -instanceName orcl1 \ -sysDBAUserName sys \ -sysDBAPassword your_password关键点确保新实例使用的参数文件(spfile)是从健康节点复制的以保持参数一致# 从orcl02复制spfile scp oracleorcl02:$ORACLE_HOME/dbs/spfileorcl.ora $ORACLE_HOME/dbs/4. 集群健康检查与验证4.1 集群组件状态验证节点重新加入后必须全面检查集群健康状况# 检查集群服务状态 crsctl check crs # 查看所有资源状态 crsctl stat res -t # 验证投票盘状态 crsctl query css votedisk # 检查ASM磁盘组 asmcmd lsdg4.2 数据库实例与性能检查-- 检查实例状态 SELECT inst_id, instance_name, status, thread# FROM gv$instance; -- 验证redo日志组 SELECT group#, thread#, status FROM v$log; -- 检查undo表空间 SELECT tablespace_name, status FROM dba_tablespaces WHERE contents UNDO;4.3 服务与负载均衡验证确保服务已正确配置到新加入的节点srvctl config service -d orcl -s orclsrv srvctl status service -d orcl -s orclsrv性能监控建议在节点重新加入后的24小时内应密切监控以下指标集群互联网络流量全局缓存等待事件实例资源使用情况可以通过AWR报告对比节点加入前后的性能变化-- 生成AWR报告 $ORACLE_HOME/rdbms/admin/awrrpt.sql在实际操作中我发现很多问题都源于配置不一致或清理不彻底。因此在删除故障节点时一定要耐心细致确保没有残留信息在重新加入节点时则要严格验证每项配置。记住预防总是比修复更重要——定期检查集群健康状况建立完善的监控体系才能最大限度减少这类故障的发生。

更多文章