2

我在我的应用程序中遇到了可重现的 Oracle 死锁。对代码的初步调查没有发现任何明显的原因,所以我想在记录正在运行的 SQL 以及最重要的是它们发生在其中的事务时重新创建这种情况。

我开始添加自己的调试语句,但这似乎是我在重新发明轮子并且已经证明容易出错(我最初错过了我的 EJB 方法之一被定义为“RequiresNew”)

有没有工具可以做到这一点?我看过:

  • log4jdbc,但从我看到的文档中并不清楚它会记录单独的事务,而且它不支持数据源,所以我需要解决这个问题。

  • jdbcslog - 也不清楚它是否会记录事务

还是我错过了一些更明显的方法来做到这一点?

4

1 回答 1

0

解决了几次类似的情况。仅通过会话记录在复杂的应用程序中找到解决方案非常困难(我称之为幸运)。(Oracle 杀死其中一个会话。一个被杀死,另一个快乐地继续存在)

最好的解决方案是询问你的 DBA(或者如果你可以访问你的 oracle 安装,你可以谷歌然后自己获取它们,这并不复杂)跟踪文件(这个文件是在终止会话的例外中提到的,所以搜索你的警报log),就会出现死锁图。(只是 DEADLOCK 的全文跟踪文件)

只需在此处查看如何查看跟踪文件的确切信息。关联

于 2012-10-02T22:00:35.803 回答