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

2022-09-02 01:22:48

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

这是否在客户端的驱动程序本身中实现?是否生成并联接了新线程?还是 JDBC 驱动程序只是向 Oracle 发送一个参数,然后强制执行超时?

达到超时后,将释放客户端和数据库上的哪些资源,以及哪些资源会挂起?Oracle 是否继续运行查询,即使客户端放弃了查询或已终止查询?客户端上是否仍有游标对象?

谢谢


答案 1

根据 Oracle JDBC FAQ

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


答案 2

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


推荐