次の方法で共有


トランザクションの昇格

適用対象: SQL Server

トランザクション 降格 は、必要に応じて完全に再頒布可能なトランザクションに自動的に昇格できる、軽量のローカル トランザクションについて説明します。 サーバー側で実行されているデータベース トランザクション内でマネージド ストアド プロシージャが呼び出されると、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.TransactionsSystem.Data.SqlClient、および SQL Server は、トランザクションの処理に関連する作業を調整し、必要に応じて完全な分散トランザクションに昇格させます。

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

参照

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