首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决等待锁的java.sql.SQLException分布式事务

如何解决等待锁的java.sql.SQLException分布式事务
EN

Stack Overflow用户
提问于 2016-08-25 18:01:05
回答 1查看 8.9K关注 0票数 2

我们使用Oracle 11G和JDK1.8组合。在我们的应用程序中,我们使用XAConnection,XAResource来处理DB事务。分布式事务。

在一些情况下,我们需要终止Java进程来停止应用程序。在关闭之后,如果我们重新启动应用程序,那么在执行DB事务时将得到下面的异常。

代码语言:javascript
复制
java.sql.SQLException: ORA-02049: timeout: distributed transaction
waiting for lock

在此之后的几个小时,我们无法使用我们的应用程序,直到锁释放。

有人能为我提供一些解决方案吗?这样我们就可以继续工作,而不是等待锁释放。

我尝试了以下选择:

( a)获取SID并使用alter command.After终止会话--这个表锁也没有释放。

我处理的数据非常少。

EN

回答 1

Stack Overflow用户

发布于 2018-02-23 19:56:51

我遵循了一个与关于如何处理分布式连接的技巧类似的主题。

Oracle连接一直处于打开状态,直到您结束本地会话或会话的数据库链接数量超过OPEN_LINKS值为止。若要减少与保持数据库链接打开相关的网络开销,如果您不打算在会话中再次使用该链接,则请使用此子句显式关闭该链接。

我认为,通过在DDL执行之后关闭连接和会话,此问题不应发生。

这个问题上给出了其他可能性

一种可能的方法可能是将distributed_lock_timeout的distributed_lock_timeout参数增加到更大的值。这将给您更长的时间来观察v$lock表,因为锁将持续更长时间。为了实现自动化,您可以-每5-10秒运行一次SQL作业,将v$lock的值记录到表中,或者将sandos提供的查询放入表中,然后分析它以查看是哪个会话导致了锁。-运行STATSPACK或AWR报告。锁定的会话应该以较长的时间出现,因此可以识别。v$session还有3列blocking_instance、blocking_session、blocking_session_statusthat可以添加到上面的查询中,以给出锁定对象的图片。

希望我帮了你,我的朋友。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39151961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档