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