在JDBC中停止或终止长时间运行的查询

8

有没有办法在JDBC中停止或终止长时间运行的Oracle查询?通常需要重启应用程序服务器才能使jdbc断开与Oracle数据库的连接。

寻找类似于SQL Plus中的功能 - 在Java或JDBC中终止会话

在SQL Plus中

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';

有没有关于在Java中执行的线索?


1
这个解决方案可能是由Oracle驱动程序实现的。 - assylias
3
应该是这样的。请参见这个问题 - eis
3个回答

8

如果你的查询在另一个线程中运行,而jdbc超时时间不足,则可以使用Statement.cancel()来终止它。


6
可能有点偏离主题,但我建议使用JDBC超时。它的额外好处是优雅地终止而不是强制终止。
在现代应用服务器中,您通常可以从数据源配置中定义JDBC超时。

2
我想让用户决定何时终止查询。是否可以在运行时更改并实现类似滑动超时的功能? - supertonsky
@supertonsky 我不知道这样的功能。 - eis
它实际上停止了在数据库上运行的查询还是只是停止等待输出并抛出异常? - JustTry
@JustTry 会向数据库发送请求以中止查询/连接,然后关闭它。有多种不同类型的JDBC超时,它们的作用方式略有不同(查询超时、连接超时、套接字超时、网络超时...),但是关于发生了什么的更多细节可以在这里找到:(https://www.cubrid.org/blog/3826470)。 - eis

2
您可以尝试使用Statement.setQueryTimeout。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接