1

我们运行 Java 1.6 并使用最新的 ojdbc14.jar。我们连接到远程 Oracle 数据库。我们要设置查询超时,因为查询的完成时间不得超过 2 分钟。

我已经这样做了:

  statement = conn.prepareCall(call);
  statement.setQueryTimeout(120);
  statement.executeQuery();

大约 8 分钟后,它最终超时!对此有任何想法或解决方法吗?一如既往,非常感谢您的帮助!

编辑:我们使用瘦驱动程序

4

2 回答 2

2

在此处查看查询超时在 Oracle JDBC 驱动程序中的工作原理:https ://forums.oracle.com/forums/thread.jspa?threadID=550257

长话短说:

  1. 当超时到期时,需要对数据库进行一次完整的往返才能取消 SQL 执行。数据库将在需要时处理取消请求。
  2. 驱动程序超时机制不是高精度机制。由于实际取消执行需要通过网络与数据库通信,因此让驱动程序变得超级精确是没有意义的。即使驱动程序是精确的,数据库响应取消请求所需的网络延迟和时间也会否定驱动程序的精度。因此,超时是驱动程序在向服务器发送取消之前让 SQL 执行的最短时间。
于 2013-05-16T13:29:58.800 回答
1

尝试在客户端 JVM 系统属性中传递 -Doracle.net.disableOob=true。根据财产文件

从 11g 开始,Thin 默认使用带外中断。如果用户更喜欢使用带内中断而不是带外中断,则可以将此属性设置为 true。

在某些情况下,底层协议不支持带外中断,或者数据库未配置为侦听带外中断。

于 2014-09-30T00:09:54.533 回答