トランザクションの昇格

適用対象:SQL Server

トランザクション の昇格 は、必要に応じて完全に再頒布可能なトランザクションに自動的に昇格できる、軽量のローカル トランザクションを表します。 サーバー側で実行されているデータベース トランザクション内でマネージド ストアド プロシージャが呼び出されると、CLR (共通言語ランタイム) コードはローカル トランザクションのコンテキストで実行されます。 データベース トランザクション内でリモート サーバーへの接続が開かれると、リモート サーバーへの接続が分散トランザクションに参加し、ローカル トランザクションは自動的に分散トランザクションに昇格します。 トランザクションの昇格では、必要になるまで分散トランザクションの作成を遅延し、分散トランザクションのオーバーヘッドを最小限に抑えます。 エンリスト キーワード (keyword)を使用して有効になっており、開発者の介入を必要としない場合、トランザクションの昇格は自動的に行われます。 .NET Framework Data Provider for SQL Serverでは、.NET Framework System.Data.SqlClient 名前空間のクラスを介して処理されるトランザクション昇格のサポートが提供されます。

Enlist キーワード

SqlConnection オブジェクトの ConnectionString プロパティは、Enlist キーワード (keyword)をサポートしています。これは、System.Data.SqlClient がトランザクション コンテキストを検出し、分散トランザクションに接続を自動的に参加させるかどうかを示します。 このキーワードが true に設定されている場合 (既定の設定)、開かれているスレッドの現在のトランザクション コンテキストに接続が自動参加します。 このキーワードが false に設定されている場合、SqlClient 接続は分散トランザクションとのやり取りを行いません。 接続文字列に Enlist が指定されていない場合、接続が開かれた時点で検出された場合、接続は分散トランザクションに自動的に参加します。

分散トランザクション

通常、分散トランザクションでは、大量のシステム リソースが消費されます。 Microsoft 分散トランザクション コーディネーター (MS DTC) は、このようなトランザクションを管理し、これらのトランザクションでアクセスされるすべてのリソース マネージャーを統合します。 一方、トランザクションの昇格は、作業を簡単なSQL Server トランザクションに効果的に委任する System.Transactions トランザクションの特別な形式です。 System.TransactionsSystem.Data.SqlClient、およびSQL Serverトランザクションの処理に関連する作業を調整し、必要に応じて完全分散トランザクションに昇格させます。

トランザクションの昇格を使用する利点は、アクティブな TransactionScope トランザクションで接続が開かれ、他の接続が開かれたときに、トランザクションは完全分散トランザクションの追加オーバーヘッドを発生させるのではなく、軽量トランザクションとしてコミットすることです。 TransactionScope の詳細については、「System.Transactions の使用」を参照してください。

参照

CLR 統合とトランザクション