ユーザーを更新するときに、ユーザーに加えられたすべての変更を追跡する必要がある状況があります-ユーザーテーブルのアクティビティログのようなものです。このアクティビティ ログは、同じ DB サーバー上の別のデータベースにあります。しかし、これら 2 つの DB 呼び出しをトランザクション スコープでラップすると、エラーが発生します。
この問題を回避/解決する方法があるかどうか疑問に思っていましたか?
ユーザーを更新するときに、ユーザーに加えられたすべての変更を追跡する必要がある状況があります-ユーザーテーブルのアクティビティログのようなものです。このアクティビティ ログは、同じ DB サーバー上の別のデータベースにあります。しかし、これら 2 つの DB 呼び出しをトランザクション スコープでラップすると、エラーが発生します。
この問題を回避/解決する方法があるかどうか疑問に思っていましたか?
エラーが正確に何を言っているのかを共有したいですか?とにかく、私の頭の上から、このユースケースは TransactionScope によってサポートされるべきです。私が覚えている限りでは、トランザクションは分散トランザクションに昇格され、マシンにインストールして実行するには分散トランザクション コーディネーター サービス ( MSDTC ) が必要です。
EDIT:エラーメッセージを見ると、2つのデータベースが異なるマシンにあるように見えるため、分散トランザクションをネットワーク経由で実行/同期する必要があります。つまり、MSDTC はインストールされていますが、このユース ケースに対して適切に構成されていません。ドキュメントで調べて、システム管理者とチャットしてください。
SQL Server 2008 を使用している場合、各接続に同じ接続文字列を使用する場合、MSDTC を使用せずにトランザクション スコープで同じSQL Server への接続をラップできます。
同じ接続文字列を使用するには、クエリで (少なくとも 1 つのデータベースの) データベース名を明示的に指定する必要があります。
SELECT ... FROM db1..Table1 ...
SELECT ... FROM db2..Table2 ...
MSDTC がインストールされ、構成されていることを確認する必要があります。構成するとは、ネットワーク DTC アクセスを有効にする必要があることを意味します。
これで始められます: http://technet.microsoft.com/en-us/library/cc753866(v=ws.10).aspx
トランザクションは 1 つの接続のみに関連付けられているため、これが可能であるとは思えません。この動作を実現するために必要なのは、n 秒ごとにログ データベースを読み取り続ける並列プロシージャ (つまり、同時スレッド) を用意することです。