You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle TAC在SQL*Plus正常但Java应用重放失败问题求助

问题分析

报错ORA-17384: Replay is disabled by server Continuity Management说明Java客户端未正确启用TAC所需的连续性配置,导致服务器端拒绝重放请求。SQL*Plus正常证明数据库端TAC服务配置无误,问题集中在UCP和JDBC的客户端配置遗漏。

需补充/修正的配置步骤
  • 启用UCP连接重放功能
    UCP需显式开启连接重放支持,在初始化PoolDataSource后添加:

    pds.setConnectionReplayEnabled(true);
    

    同时在连接属性中启用JDBC连续性参数:

    pds.setConnectionProperty("oracle.jdbc.enableContinuity", "true");
    
  • 确保Replay数据源的模式设置
    你已使用oracle.jdbc.replay.OracleDataSourceImpl,需明确其重放模式为自动触发:

    ((OracleDataSourceImpl)pds.getConnectionFactory()).setReplayMode(OracleDataSourceImpl.REPLAY_MODE_AUTO);
    
  • 检查JDBC驱动版本兼容性
    必须使用与Oracle 19c匹配的JDBC驱动(建议19.3.0及以上版本),旧驱动可能不支持TAC完整功能。

  • 清理重复代码
    代码中重复执行了pds = PoolDataSourceFactory.getPoolDataSource();,保留一次即可,避免冗余对象创建。

  • 验证事务边界正确性
    TAC仅支持显式事务(auto-commit=false),你已设置此属性,但需确保doTx方法内的操作完全包裹在显式事务中(执行完更新后调用conn.commit()),未提交的事务无法触发重放。

修正后的关键配置片段
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName(CONN_FACTORY_CLASS_NAME);
pds.setURL(WALLET_URL);
pds.setConnectionPoolName("JDBC_UCP_POOL");
pds.setInitialPoolSize(5);
pds.setMinPoolSize(5);
pds.setMaxPoolSize(20);
pds.setTimeoutCheckInterval(5);

// 启用FAN与连接重放
pds.setFastConnectionFailoverEnabled(true);
pds.setConnectionReplayEnabled(true);

// TAC核心连接属性配置
pds.setConnectionProperty(OracleConnection.CONNECTION_PROPERTY_AUTOCOMMIT, "false");
pds.setConnectionProperty("oracle.jdbc.enableContinuity", "true");
pds.setConnectionProperty(OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE, "100");

// 原有其他配置...
额外验证步骤
  1. 数据库端执行SELECT service_name, continuity FROM dba_services;,确认pdb_tac服务的continuity状态为ENABLED
  2. 测试时确保中断的是当前连接所在的实例,且备用实例已正常提供服务
  3. 检查客户端sqlnet.ora是否配置RETRY_COUNT和RETRY_DELAY参数,保障连接重试机制正常

内容的提问来源于stack exchange,提问作者cptkirkh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:56:20