2010-12-15 8 views
0

Webアプリケーションのテスト中にデータベースの整合性をチェックしていましたが、奇妙な事態が発生しました。Spring JDBCがトランザクションをランダムにロールバックするように見える

特定の時間の間に各テーブルにIdのギャップがあります。すなわち、114と130の間のすべてのIDが消え、約20分でそれらが分離されます。

説明すると、ロールバックされたトランザクションの外観です。行のレコードがなく、トリガーが実行されておらず、ログも記録されていません。

私のアプリケーションでは、テーブルからデータを削除することはできないため、コミットされていない大規模なトランザクション(複数のデータベース要求)がロールバックされると考えられます。

自動コミットオプションがオンで、この期間にサーバーが再起動されませんでした。

このようなことは誰も聞いたことがありますか?どんな助けや提案も高く評価されます。

ありがとうございます。


EDIT:

が、サーバが適切な時期の周りに再起動を強制することを思わTomcatのログで探しています。 これにより、JDBCはこのようなトランザクションをロールバックしますか?

サーバーが理由なしに再起動したようです...これはTomcatまたはJDBCのバグですか?

+1

自動コミットをオンにしていることは悪い考えのように聞こえます。しかし、自動コミットを行っている場合、どのように大規模なトランザクションをロールバックすることができますか? –

+0

良い質問ですが、わかりません。誰かがSpringのJDBCがトランザクションをどのように処理するかについて詳しく説明できますか? – Jivings

+1

私はそれが1つの大きなトランザクションであるという前提が間違っていると思います。再起動を考えれば、おそらく何度も試行された単一のトランザクションでした。トランザクションのロールバックを引き起こしていたものは、おそらくメモリがリークしていたか、または何らかの原因でトランザクションが再開された可能性があります。 – Preston

答えて

0

一般的には、Tomcatの非正常なシャットダウンがロールバックの原因であると考えられます。

私はスプリングトランザクションマネージャーの別の実装を使用し始めました。これはうまくいけば問題が再発することはないでしょう。

ありがとうございました。

関連する問題