トランザクションの昇格
トランザクションの昇格とは、必要に応じて自動的に、軽量なローカル トランザクションを完全な分散トランザクションに変換することです。サーバー側で実行されているデータベース トランザクション内でマネージ ストアド プロシージャが呼び出されると、CLR (共通言語ランタイム) コードはローカル トランザクションのコンテキストで実行されます。データベース トランザクション内でリモート サーバーへの接続が開かれると、リモート サーバーへの接続が分散トランザクションに参加し、ローカル トランザクションは自動的に分散トランザクションに昇格します。トランザクションの昇格では、必要になるまで分散トランザクションの作成を遅延し、分散トランザクションのオーバーヘッドを最小限に抑えます。トランザクションの昇格が Enlist キーワードを使用して有効になっている場合、トランザクションの昇格は自動的に行われるので、開発者の介入は必要ありません。.NET Framework Data Provider for SQL Server では、トランザクションの昇格がサポートされます。トランザクションの昇格は、.NET Framework の System.Data.SqlClient 名前空間のクラスによって行われます。
Enlist キーワード
SqlConnection オブジェクトの ConnectionString プロパティでは、Enlist キーワードがサポートされます。このキーワードは、System.Data.SqlClient 名前空間で、トランザクション コンテキストを検出し、自動的に接続を分散トランザクションに参加させるかどうかを示すものです。このキーワードが true に設定されている場合 (既定の設定)、開かれているスレッドの現在のトランザクション コンテキストに接続が自動参加します。このキーワードが false に設定されている場合、SqlClient 接続は分散トランザクションとのやり取りを行いません。接続文字列で Enlist キーワードが指定されていない場合は、接続が開かれたときに分散トランザクションが検出されると、接続は分散トランザクションに自動参加します。
分散トランザクション
通常、分散トランザクションでは、大量のシステム リソースが消費されます。Microsoft 分散トランザクション コーディネータ (MS DTC) では、分散トランザクションを管理し、それらのトランザクションでアクセスされているすべてのリソース マネージャを統合します。これに対し、トランザクションの昇格は、System.Transactions トランザクションの特殊な形式であり、作業を単純な SQL Server トランザクションに効率よく委任します。System.Transactions、System.Data.SqlClient、および SQL Server は、トランザクションの処理に関連する作業を調整し、必要に応じて、トランザクションを完全な分散トランザクションに昇格します。
トランザクションの昇格を使用するメリットとして、1 つのアクティブな TransactionScope で接続が開かれていて、他の接続が開かれていない場合、そのトランザクションは軽量なトランザクションとしてコミットされ、完全な分散トランザクションとしてのオーバーヘッドが発生しないという点があります。TransactionScope の詳細については、「System.Transactions の使用」を参照してください。