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