Oracle RAC 服务切换详解
Oracle RAC 服务切换详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
RAC 服务切换保证应用连续[1]:
详细见:Oracle 服务管理详解、Oracle 应用连续性详解。
2. 服务概念
2.1 Preferred
- 首选实例
- 正常运行
- 优先
2.2 Available
- 备选实例
- Preferred 故障时
- 切换
2.3 切换
- 自动
- 透明
- 快速
3. 自动切换
3.1 节点故障
- Preferred 故障
- 服务切到 Available
- 自动
3.2 实例故障
- 实例崩溃
- 服务切换
- 自动
3.3 时间
- 秒级
- 应用重连
- TAF/AC
4. 手动切换
4.1 relocate
srvctl relocate service -d prod -s oltp_svc \
-oldinst prod1 -newinst prod2
4.2 stop/start
srvctl stop service -d prod -s oltp_svc -i prod1
srvctl start service -d prod -s oltp_svc -i prod2
4.3 验证
srvctl status service -d prod -s oltp_svc
5. TAF
5.1 配置
srvctl add service -d prod -s taf_svc \
-preferred prod1,prod2 \
-tafpolicy BASIC
5.2 TNS
# tnsnames.ora
prod =
(DESCRIPTION =
(FAILOVER = ON)
(ADDRESS = ...)
(CONNECT_DATA =
(SERVICE_NAME = prod)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 5)
(DELAY = 10)
)
)
)
5.3 行为
- 连接断开
- TAF 恢复
- SELECT 继续
6. AC/TAC
6.1 AC
srvctl add service -d prod -s ac_svc \
-preferred prod1,prod2 \
-commit_outcome TRUE \
-retention 86400 \
-replay_init_time 300 \
-session_state DYNAMIC
6.2 TAC
srvctl add service -d prod -s tac_svc \
-preferred prod1,prod2 \
-commit_outcome TRUE \
-retention 86400 \
-replay_init_time 300 \
-session_state DYNAMIC
6.3 行为
- 事务重试
- 透明
- 连续
详细见:Oracle 应用连续性详解。
7. FCF
7.1 连接池
// Java UCP
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setFastConnectionFailoverEnabled(true);
pds.setONSConfiguration("nodes=node1:6200,node2:6200");
7.2 事件
- ONS 事件
- 快速感知
- 切换
7.3 优势
- 快速
- 透明
- 性能
8. 负载均衡
8.1 Client-side
# tnsnames.ora
LOAD_BALANCE = ON
8.2 Server-side
- Listener 分配
- 基于负载
- 智能
8.3 服务
- Preferred/Available
- 负载分布
- 优化
9. 监控
9.1 服务状态
srvctl status service -d prod
srvctl config service -d prod -s oltp_svc
9.2 连接
SELECT inst_id, service_name, count(*)
FROM gv$session
GROUP BY inst_id, service_name;
9.3 事件
SELECT * FROM v$system_event WHERE event LIKE '%failover%';
10. 故障切换流程
10.1 检测
- 集群检测
- 服务故障
- 告警
10.2 切换
- Preferred -> Available
- 服务启动
- 应用重连
10.3 验证
- 服务状态
- 应用连接
- 业务
10.4 恢复
- 旧节点修复
- 服务回切
- 验证
11. 应用场景
11.1 节点故障
- RAC 节点故障
- 服务切换
- 秒级
11.2 维护
- 计划维护
- 服务迁移
- 零停机
11.3 负载
- 负载均衡
- 资源利用
- 性能
12. 常见问题
12.1 切换失败
- 状态
- 配置
- 检查
12.2 应用不重连
- TAF/AC
- 连接池
- 配置
12.3 负载不均
- LOAD_BALANCE
- 服务
- 优化
13. 最佳实践
- 服务化:所有应用
- Preferred/Available:配置
- TAF/AC:连续
- FCF:连接池
- 监控:状态
- 测试:切换
- 文档:配置
- 演练:故障
- 自动化:切换
- 优化:负载
14. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Managing Services” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/