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