可以恢复jdbc连接吗?

时间:2011-09-13 20:18:50

标签: database oracle jdbc

是否可以恢复因数据库不可用而关闭的jdbc连接。

为了回馈地面,我依次得到以下错误。它看起来不是手动重新启动。我的问题的原因是我被告知该应用程序没有正常行为 重新开始。因此,如果连接丢失,可以在数据库重新启动后恢复。

java.sql.SQLException:ORA-12537:TNS:连接已关闭

java.sql.SQLRecoverableException:ORA-01034:ORACLE不可用 ORA-27101:共享内存领域不存在 IBM AIX RISC System / 6000错误:2:没有此类文件或目录

java.sql.SQLRecoverableException:ORA-01033:正在进行ORACLE初始化或关闭

2 个答案:

答案 0 :(得分:3)

没有。连接“已死”。创建一个新连接。

一个好方法是使用connection pool,它会在提供给你之前测试连接是否仍然正常,并在需要时自动创建一个新连接。

有几个开源连接池可供使用。我用Apache's JDCP,它对我有用。

<强>编辑:
鉴于您希望等到数据库恢复正常(如果它已关闭)(有趣的想法),您可以实现getConnection()的自定义版本,如果数据库没有响应,“等待一段时间并再次尝试”。 / p>

P.S。我喜欢这个主意!

答案 1 :(得分:0)

无法恢复连接。可以做的是将连接故障转移到另一个数据库实例。 RAC和数据保护安装支持此配置。

对于只读事务,这不是问题。但是对于执行DML的事务,这可能是一个问题,特别是如果对DB的最后一次调用是提交。在提交的情况下,客户端无法判断提交调用是否完成。数据库何时失败;在执行提交之前,或者在执行提交之后(但不将确认发送回客户端)。只有应用程序具有此逻辑并且可以做正确的事情。如果故障转移后的应用程序未验证最后一个事务的状态,则可以进行重复事务。这是一个已知问题,我们大多数人都经历过购票或类似网络交易。

相关问题