【Oracle】Oracle 11g RAC网络故障切换单机

发布于:2025-08-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

在Oracle 11g RAC环境中,当一台节点因网络故障完全不可用且无法快速恢复时,为了保障业务连续性,可以将其从集群中隔离,并让剩余的健康节点以单实例模式继续运行。以下是详细的操作步骤和注意事项:

核心思路:
隔离故障节点:确保集群不再尝试与故障节点通信。
修改集群配置:强制剩余节点以单实例模式运行。
重建资源:确保VIP、监听器等资源在健康节点生效。

详细步骤:
1.确认故障节点状态

crsctl status node -n  # 查看所有节点状态
crsctl status res -t   # 查看所有资源状态(关注故障节点资源是否OFFLINE)

如果故障节点状态为 UNKNOWN 或资源持续 FAILED,说明集群已检测到异常。

2.驱逐故障节点(强制移除)

# 在健康的节点上执行:
crsctl delete node -n <故障节点主机名> -f  # 强制从集群配置中删除故障节点

注意:此操作不可逆,需确保故障节点已无法恢复。

3.修改集群参数(关键步骤)

-- 在健康的节点上修改参数:
alter system set cluster_database=FALSE scope=spfile sid='<健康节点实例名>';
示例:
alter system set cluster_database=FALSE scope=spfile sid='RACDB1';

4.停止集群服务(仅限健康节点)

crsctl stop crs -f  # 强制停止本节点集群服务

5.清理故障节点残留资源

# 在健康节点上清理故障节点的资源注册:
crsctl delete res ora.<故障节点VIP名>.vip -f
crsctl delete res ora.<故障节点监听名>.lsnr -f

6.重启健康节点数据库(单实例模式)

sqlplus / as sysdba
> shutdown immediate;     # 确保实例关闭
> startup;                # 此时将以单实例模式启动
验证参数:
show parameter cluster_database; -- 应返回 FALSE

7.重新配置监听与VIP

# 手动启动本节点监听(VIP通常由CRS自动管理):
srvctl start listener -n <健康节点主机名>
srvctl start vip -n <健康节点主机名> -v  # 确保VIP生效

8.修改应用连接字符串
将应用的TNS连接字符串指向健康节点的 VIP或主机名,移除故障节点地址:

tnsnames.ora
RACDB_SINGLE =
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = <健康节点VIP>)(PORT = 1521))
    (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RACDB))
  )

关键注意事项:
数据一致性
确保故障节点在宕机前未持有未提交事务(通常RAC会自动处理)。
检查 gv$transaction 是否有残留事务(需在故障前查看,现已不可用)。

资源清理
使用 crsctl stat res -t -v 检查所有资源是否仅绑定到健康节点。
若故障节点资源残留,用 crsctl delete res 强制删除。

备份与恢复
立即备份:单节点运行后,立即进行全库备份。
重建故障节点:故障修复后,需重新添加节点到集群(需重装Grid Infrastructure并执行 addNode.sh)。

性能风险
单节点可能面临更高负载,监控 AWR报告 和 等待事件。

回退集群模式(恢复后)

alter system set cluster_database=TRUE scope=spfile sid='*';  # 恢复集群模式
srvctl stop database -d RACDB
srvctl start database -d RACDB   # 正常启动所有节点

自动化工具辅助:
使用 srvctl 命令管理资源:

srvctl config database -d RACDB  # 检查数据库配置
srvctl status vip -n <节点名>     # 检查VIP状态

通过OEM(Oracle Enterprise Manager)实时监控切换状态。

总结流程图:

graph TD
    A[故障节点网络中断] --> B{是否可快速恢复?}
    B -->|否| C[强制驱逐故障节点]
    C --> D[修改cluster_database=FALSE]
    D --> E[停止集群服务]
    E --> F[清理故障节点资源]
    F --> G[单实例模式启动数据库]
    G --> H[重配监听/VIP]
    H --> I[修改应用连接]
    I --> J[监控单节点性能]

通过以上步骤,业务将在健康节点以单实例模式继续运行。故障节点修复后,需重新加入集群并恢复高可用模式。务必在变更前备份OCR和数据库!


网站公告

今日签到

点亮在社区的每一天
去签到