Oracle 应用连续性详解
Oracle 应用连续性详解
适用版本:Oracle Database 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Application Continuity 保证应用请求连续[1]:
2. 类型
2.1 TAF
- Transparent Application Failover
- 10g+
- SELECT 恢复
- 会话重连
2.2 AC
- Application Continuity
- 12c+
- 事务重试
- 透明
2.3 TAC
- Transparent Application Continuity
- 18c+
- 自动重试
- 智能识别
3. AC 原理
3.1 Replay
- 请求重放
- 数据库端记录
- 自动
3.2 不可重放
- 非幂等操作
- 标记
- 跳过
3.3 一致性
- COMMIT 保证
- 结果一致
- 透明
4. 配置
4.1 服务
srvctl add service -d prod -s oltp_svc \
-preferred prod1,prod2 \
-available prod3 \
-notification TRUE \
-failoverretry 5 \
-failoverdelay 10 \
-commit_outcome TRUE \
-retention 86400 \
-replay_init_time 300 \
-session_state DYNAMIC
4.2 参数
- commit_outcome:COMMIT 结果
- replay_init_time:重放时间
- failoverretry:重试次数
- failoverdelay:重试延迟
- session_state:会话状态
4.3 连接池
- UCP
- OCI
- 连接池
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)
(LOAD_BALANCE = ON)
(ADDRESS = ...)
(CONNECT_DATA =
(SERVICE_NAME = prod)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 5)
(DELAY = 10)
)
)
)
6. TAC 配置
6.1 服务
srvctl add service -d prod -s tac_svc \
-preferred prod1,prod2 \
-commit_outcome TRUE \
-retention 86400 \
-replay_init_time 300 \
-session_state DYNAMIC
6.2 自动
- 自动识别
- 自动重试
- 智能跳过
7. 不可重放操作
7.1 标记
-- PL/SQL 标记
DBMS_APP_CONT.SET_END_OF_TRANSACTION(FALSE);
7.2 跳过
-- 不可重放
EXEC DBMS_APP_CONT.SKIP_ALL_DML;
7.3 识别
- 序列
- SYSDATE
- 非幂等
- 识别
8. FCF(Fast Connection Failover)
8.1 原理
- 连接池事件
- 快速感知
- 透明
8.2 配置
// Java UCP
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setFastConnectionFailoverEnabled(true);
pds.setONSConfiguration("nodes=node1:6200,node2:6200");
8.3 优势
- 快速
- 应用感知
- 性能
9. 应用场景
9.1 节点故障
- RAC 节点故障
- 服务切换
- 应用重连
9.2 Data Guard 切换
- 主备切换
- 应用重连
- 连续
9.3 维护
- 计划维护
- 透明
- 不中断
10. 监控
10.1 服务
srvctl status service -d prod -s oltp_svc
srvctl config service -d prod -s oltp_svc
10.2 重试
SELECT name, value FROM v$sysstat
WHERE name LIKE '%replay%';
10.3 事件
SELECT * FROM v$system_event WHERE event LIKE '%failover%';
11. 限制
11.1 应用
- 需支持
- 连接池
- UCP/OCI
11.2 操作
- 非幂等限制
- 标记
- 处理
11.3 资源
- Replay 内存
- 监控
- 调整
12. 常见问题
12.1 重试失败
- 非幂等
- 检查
- 标记
12.2 性能
- Replay 开销
- 监控
- 评估
12.3 连接
- 连接池
- FCF
- 配置
13. 最佳实践
- TAC:18c+
- UCP:连接池
- FCF:启用
- 服务:配置
- commit_outcome:TRUE
- 非幂等:标记
- 监控:重试
- 测试:故障
- 文档:配置
- 演练:定期
14. 参考资料
[1] Oracle Database Development Guide 19c, “Application Continuity” https://docs.oracle.com/en/database/oracle/oracle-database/19/adfns/