【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和数据库!

相关推荐
云老大TG:@yunlaoda3603 分钟前
如何使用华为云国际站代理商的BRS进行数据安全保障?
大数据·数据库·华为云·云计算
工具人55557 分钟前
strip()方法可以删除字符串中间空格吗
数据库·mysql
松涛和鸣11 分钟前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
xinyu_Jina19 分钟前
局域网文件传输:P2P应用层协议——元数据握手与数据通道的生命周期管理
数据库·asp.net·p2p
彬鸿科技36 分钟前
【SDR课堂第42讲】RFSOC开发入门之开发环境搭建(三)
linux·运维·数据库·ubuntu·postgresql·软件无线电·软无
九章-37 分钟前
金仓数据库助力中国石油安全环保技术研究院安全生产智能管控系统全面实现数据库国产化替代
数据库·安全
陌路2038 分钟前
redis 发布订阅功能
数据库·redis·缓存
丁丁丁梦涛40 分钟前
navicat跨服务器连接MySQL数据库
服务器·数据库·mysql
tgethe43 分钟前
mysql-索引详解
数据库·mysql
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(11):分段聚合深度解析——从原理到实战的完整指南
数据库·apache·iotdb