2

アプリケーション内で再現可能なOracleデッドロックが発生しました。コードの最初の調査では明らかな原因は明らかにされていないため、実行中のSQLと、最も重要なこととして、SQLが実行されているトランザクションをログに記録しながら状況を再現したいと思います。

独自のデバッグステートメントを追加し始めましたが、これは車輪の再発明を行っているようで、すでにエラーが発生しやすいことが証明されています(EJBメソッドの1つが「RequiresNew」として定義されていることを最初は見逃していました)

これを行うツールはありますか?私が見た:

  • log4jdbcですが、個別のトランザクションをログに記録することをドキュメントから確認できません。さらに、データソースをサポートしていないため、これを回避する必要があります。

  • jdbcslog-トランザクションをログに記録するかどうかも明確ではありません

それとも、これを行うためのより明白な方法が欠けていますか?

4

1 に答える 1

0

同様のケースを数回解決しました。セッションログだけから複雑なアプリで解決策を見つけるのは非常に困難です (私はそれをラッキーと呼んでいます)。(オラクルはこれらのセッションの1つを殺します。1つは殺され、もう1つは幸せに生き続けます)

最善の解決策は、DBA に依頼することです (または、オラクルのインストールにアクセスできる場合は、Google で検索して自分で取得できます。それほど複雑ではありません) トレース ファイル (このファイルは、強制終了されたセッションを除いて言及されているため、アラートを検索してください) log)、デッドロック グラフが表示されます。(DEADLOCK のフルテキスト トレース ファイルのみ)

トレースファイルを調べる方法の正確な情報については、ここを参照してください。リンク

于 2012-10-02T22:00:35.803 に答える