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

相关推荐
NCIN EXPE19 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台19 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路19 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家19 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE19 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow1219 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO19 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_7436239219 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python
pele20 小时前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python