Oracle的JDBC查询超时是如何实现的?

one*_*elf 21 java oracle timeout jdbc

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

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

达到超时后,客户端和数据库上的哪些资源被释放,哪些存在?即使客户端放弃了查询还是终止,Oracle是否继续运行查询?客户端是否还有游标对象?

谢谢

Jan*_*cki 15

根据Oracle JDBC FAQ

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


Gar*_*ers 12

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