Oracle 应用连续性详解

Oracle 应用连续性详解

适用版本:Oracle Database 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Application Continuity 保证应用请求连续[1]:

详细见:Oracle TAF 与 TAC 配置详解


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. 最佳实践

  1. TAC:18c+
  2. UCP:连接池
  3. FCF:启用
  4. 服务:配置
  5. commit_outcome:TRUE
  6. 非幂等:标记
  7. 监控:重试
  8. 测试:故障
  9. 文档:配置
  10. 演练:定期

14. 参考资料

[1] Oracle Database Development Guide 19c, “Application Continuity” https://docs.oracle.com/en/database/oracle/oracle-database/19/adfns/