Java 甲骨文怎么样';是否实现了JDBC查询超时?

Java 甲骨文怎么样';是否实现了JDBC查询超时?,java,oracle,jdbc,timeout,Java,Oracle,Jdbc,Timeout,我很好奇Oralce JDBC瘦客户端如何实现查询超时。 这可以通过调用java.sql.Statement的setQueryTimeout(int秒)来设置 方法 这是在客户端的驱动程序本身中实现的吗?是一个 新线程生成并加入?或者JDBC驱动程序只是 向Oracle发送一个参数,然后它强制执行超时 达到超时后,客户端上的哪些资源和 数据库被释放了,哪些被挂起了?甲骨文还会继续吗 即使客户机放弃查询,也要运行查询 结束?客户端上还有游标对象吗 谢谢我知道,当达到超时时,服务器端的查询不会继续。

我很好奇Oralce JDBC瘦客户端如何实现查询超时。 这可以通过调用java.sql.Statement的setQueryTimeout(int秒)来设置 方法

这是在客户端的驱动程序本身中实现的吗?是一个 新线程生成并加入?或者JDBC驱动程序只是 向Oracle发送一个参数,然后它强制执行超时

达到超时后,客户端上的哪些资源和 数据库被释放了,哪些被挂起了?甲骨文还会继续吗 即使客户机放弃查询,也要运行查询 结束?客户端上还有游标对象吗


谢谢

我知道,当达到超时时,服务器端的查询不会继续。在达到超时之前或之后,会向服务器发送一些意图/信号选项,以指示服务器应该停止。我通过查看服务器上的各种V$表来验证这一点,以查看查询是否正在运行。(V$SESSION、V$SQL等)

Tanel Poder写了一篇关于取消如何通过OCI(Oracle调用接口)工作的文章。
我想JDBC也做了类似的事情。如果您正在使用胖驱动程序,则可以通过OCI尝试跟踪会话(通过设置sqlnet.ora)并查看记录的内容。

当查询在使用setTimeOut方法时实际超时,Oracle服务器引发SQL异常,错误代码为ORA-01013-用户请求取消当前操作

这意味着操作已被优雅地取消(就oracle而言/尽oracle所能),因为这是oracle发送的消息。

根据


语句超时线程。如果执行任何带有超时的语句,则会创建此线程无论有多少条语句或连接,都只创建一个线程。此线程在VM的生命周期内持续。

那么,这是否意味着JDBC驱动程序为查询生成另一个线程并等待其超时,然后发送一个OCICancel?无法说明它是一个单独的线程还是一个循环“服务器上的任何内容…是否超时…服务器上的任何内容…是否超时…”另请参阅