Oracle连接/查询超时

时间:2009-09-07 10:50:25

标签: java oracle jdbc timeout

是否可以为Oracle数据库查询指定连接/查询超时?在Oracle端还是在Oracle的JDBC驱动程序(10.2.0.4)中?那么,那个Java客户端刚刚收到错误,比方说,2分钟而不是等到Oracle完成执行查询?

4 个答案:

答案 0 :(得分:6)

如果在事务上下文中执行查询,则JTA事务监视器的事务超时值将是查询超时的决定因素。此配置取决于从一个应用程序服务器到另一个应用程序服务器。

在单个查询级别(缺少JTA事务监视器)时,setQueryTimeout方法可用于设置Statement / PreparedStatement / CallableStatement对象执行的超时。

<强>更新

不应依赖setQueryTimeout,尽管它可以工作(至少来自J2SE客户端)。它通过JDBC驱动程序执行Oracle数据库服务器的完整往返。然后,数据库停止执行查询。不要依赖它来进行时间关键的应用。

答案 1 :(得分:3)

查看Oracle个人资料。这允许您在数据库级别指定多个限制。其中一个是每个查询的最大CPU时间。

如果您的查询定期运行超过2分钟,您可能需要先对查询进行一些调整。

答案 2 :(得分:0)

根据http://www.javamonamour.org/2012/09/oraclenetconnecttimeout.html

对于jdbc版本<10.1.0.5

oracle.net.READ_TIMEOUT对于jdbc版本> = 10.1.0.5的oracle.jdbc.ReadTimeout

因此,如果您使用的是JDBC驱动程序版本10.1.0.5或更高版本,则oracle.jdbc.ReadTimeout是正确的属性。

答案 3 :(得分:0)

设置oracle.jdbc.ReadTimeout有助于使jdbc调用超时。我在生产Spring Boot应用程序中通过指定以下数据源属性来使用它

spring.datasource.hikari.connection-timeout=1000
spring.datasource.hikari.dataSourceProperties=oracle.jdbc.ReadTimeout=2000

注意:之前,此应用使用的是tomcat连接池,并且在将上述属性设置为相同值之后,发生了超时,但该池无法有效处理关闭的连接对象。因此,我切换到hikariCP并获得了更好的结果。我做了一个video,它模拟了慢速的jdbc调用,该调用在使用ReadTimeout属性时将结果与tomcat和hikari连接池进行了比较。