关闭连接错误17008

时间:2017-06-23 13:35:28

标签: java oracle

我正在尝试执行一个查询,这会花费大量时间来导致关闭连接,这意味着在查询执行/提交之前连接已关闭。我想从错误中恢复,获得新连接,然后重试。

Caused by: java.sql.SQLRecoverableException: Closed Connection
    at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:4051)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1473)
    at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:406)
    at com.fimt.sat.testora12date.dao.DateSaverGetterDao.testAbandonedConnectionWithDS(DateSaverGetterDao.java:73)

4 个答案:

答案 0 :(得分:0)

您可以尝试捕获此特定错误:

public save(MyData data) {

    try {
        ...
    } catch (SQLRecoverableException e) {
        // Better handling a parameter to set
        // the maximum number of retries
        // Eventually consider to retry on a secondary thread 
        // delayed of a certain number of seconds
        save(data);
    }

}

答案 1 :(得分:0)

@Davide Lorenzo MARINO的答案非常棒,除非你有一个足够严重的查询,即使经过这么几次恢复也不会被执行。

我不是Oracle的专业人员,但我发现你可以调整某种RAC故障转移,即使在超时后也可以保持交易。

但一般来说,我的愿景是在多个查询中以某种方式分割数据会更好

答案 2 :(得分:0)

更好地分割/存储select查询中的数据并以某些间隔提交。例如,如果查询的持续时间为2个月,请将其/循环/拆分15天,然后执行必要的语句并提交

答案 3 :(得分:0)

在连接到数据库并访问表时出现以下错误。 “执行请求的操作时遇到错误” 封闭连接 供应商代码17008。

在下载最新版本的SQL Developer 19.2.1.247之后能够解决此问题。较早的版本是3.x。