MSDTCがトランザクションを分散トランザクションにプロモートしたことを確実に確認するにはどうすればよいですか?
これは、.netでTransactionScopeを使用する場合です。
現在、同僚は自分のマシンのコーディネーターをシャットダウンすることでこれをテストしています。例外がスローされた場合、これはトランザクションを促進する試みが発生した証拠と見なされます。これは有効なテストですか?
MSDTCがトランザクションを分散トランザクションにプロモートしたことを確実に確認するにはどうすればよいですか?
これは、.netでTransactionScopeを使用する場合です。
現在、同僚は自分のマシンのコーディネーターをシャットダウンすることでこれをテストしています。例外がスローされた場合、これはトランザクションを促進する試みが発生した証拠と見なされます。これは有効なテストですか?
他の例外ではなくDTC例外が発生していることを確認する必要がありますが、テストは問題ないと思います。
あなたができる他のいくつかのこと:
SQLプロファイラーを実行し、トランザクショントレースDTCTransactionの下で実行することもできます。
コードに関しては、DistributedTransactionStartedイベントを処理し、分散トランザクションの開始時にメッセージをログに記録できます。
または、ログメッセージを追加しSystem.Transactions.Transaction.Current.
TransactionInformation.DistributedIdentifierて、トランザクションが終了する前にログに記録することもできます。値がGuid.Empty{00000000-0000-0000-0000-000000000000}の場合、それは分散トランザクションではありません。それ以外の場合、トランザクションは分散トランザクションにプロモートされています。
SQL Server 2008を使用しているとのことですが、使用している.NETのバージョンは何ですか。3.5ですか?SQL Server2008と.NET3.5を使用している場合は、分散トランザクションにエスカレートすることなく、同じトランザクションで同じデータベースへの複数の接続(同じ接続文字列を使用)を開くことができるはずです。これを機能させるには、2番目の接続を開く前に最初の接続を閉じる必要があります。
すべての条件が満たされ、トランザクションがまだエスカレートしているように見える場合は、次のようにします。
更新:分散トランザクションコーディネーター(MSDTC)とトランザクションFAQは、MSDTCリソースの優れたリストをまとめたものです。