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

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

核心思路:

隔离故障节点:确保集群不再尝试与故障节点通信。

修改集群配置:强制剩余节点以单实例模式运行。

重建资源:确保VIP、监听器等资源在健康节点生效。

详细步骤:

1.确认故障节点状态

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

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

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

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

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

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

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

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

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

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

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

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

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

7.重新配置监听与VIP

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

8.修改应用连接字符串

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

sql 复制代码
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报告 和 等待事件。

回退集群模式(恢复后)

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

自动化工具辅助:

使用 srvctl 命令管理资源:

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

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

总结流程图:

sql 复制代码
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和数据库!

相关推荐
IpdataCloud18 分钟前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很33 分钟前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
IvorySQL1 小时前
当PostgreSQL“听懂”MySQL——协议兼容层的设计与实战
数据库·人工智能·postgresql
这个DBA有点耶2 小时前
银行核心系统数据库迁移怎么选?6 步法+5 个避坑指南
数据库·安全·架构
风哥2号2 小时前
数据库教程FGMT31‑Linux平台MySQL9.7安装配置与版本升级
数据库
hanchenxing2 小时前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
java_logo3 小时前
Docker 部署 Milvus:轻松搭建高性能向量数据库平台
数据库·docker·私有化部署·milvus·向量数据库·rag·轩辕镜像
A心有千千结4 小时前
GO 使用 OpenTelemetry 进行编译时插桩,实现零码注入
数据库·golang·可观测性·观测云
GreatVicent4 小时前
腾讯AI产业大会解读:Agent进场,企业基础设施怎么搭
大数据·数据库·人工智能·llm·agent·企业信息化
大模型码小白5 小时前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构