sql >> データベース >  >> RDS >> Sqlserver

接続が閉じられると、コミットされていないトランザクションはどうなりますか?

    接続プールが適用されている間は開いたままにすることができます。例:クライアントが「中止」として送信するため、コマンドタイムアウトによってロックとTXNが残る可能性があります。

    2つの解決策:

    • 文字通り、クライアントでテストします:

      IF @@TRANCOUNT <> 0 ROLLBACK TRAN

    • SET XACT_ABORT ONを使用します TXNが確実にクリーンアップされるようにするには:質問1と質問2

    私はいつもSET XACT_ABORT ONを使用します 。

    このSQLチームのブログから:

    接続プーリングでは、ロールバックなしで接続を閉じるだけで接続がプールに戻され、トランザクションは後で再利用されるかプールから削除されるまで開いたままになります。これにより、ロックが不要に保持され始め、他のタイムアウトとローリングブロックが発生する可能性があります

    MSDNのセクション「トランザクションサポート」(太字)

    接続が閉じられると、接続は解放されてプールに戻され、トランザクションコンテキストに基づいて適切なサブディビジョンに戻されます。したがって、分散トランザクションがまだ保留中であっても、エラーを生成せずに接続を閉じることができます。これにより、後で分散トランザクションをコミットまたは中止することができます。



    1. Android.comのSQLデータベースへのデータの保存チュートリアルを理解する

    2. PostgreSQLでのRandom()のしくみ

    3. Laravel:指定されたキーが長すぎました。キーの最大長は767バイトです

    4. HIPAA準拠のデータベースを維持することの重要性