0

ユーザーを更新するときに、ユーザーに加えられたすべての変更を追跡する必要がある状況があります-ユーザーテーブルのアクティビティログのようなものです。このアクティビティ ログは、同じ DB サーバー上の別のデータベースにあります。しかし、これら 2 つの DB 呼び出しをトランザクション スコープでラップすると、エラーが発生します。

この問題を回避/解決する方法があるかどうか疑問に思っていましたか?

4

4 に答える 4

2

エラーが正確に何を言っているのかを共有したいですか?とにかく、私の頭の上から、このユースケースは TransactionScope によってサポートされるべきです。私が覚えている限りでは、トランザクションは分散トランザクションに昇格され、マシンにインストールして実行するには分散トランザクション コーディネーター サービス ( MSDTC ) が必要です。

EDIT:エラーメッセージを見ると、2つのデータベースが異なるマシンにあるように見えるため、分散トランザクションをネットワーク経由で実行/同期する必要があります。つまり、MSDTC はインストールされていますが、このユース ケースに対して適切に構成されていません。ドキュメントで調べて、システム管理者とチャットしてください。

于 2013-02-08T13:56:21.773 に答える
1

SQL Server 2008 を使用している場合、各接続に同じ接続文字列を使用する場合、MSDTC を使用せずにトランザクション スコープで同じSQL Server への接続をラップできます。

同じ接続文字列を使用するには、クエリで (少なくとも 1 つのデータベースの) データベース名を明示的に指定する必要があります。

SELECT ... FROM db1..Table1 ...

SELECT ... FROM db2..Table2 ...
于 2013-02-11T08:58:40.080 に答える
0

MSDTC がインストールされ、構成されていることを確認する必要があります。構成するとは、ネットワーク DTC アクセスを有効にする必要があることを意味します。

これで始められます: http://technet.microsoft.com/en-us/library/cc753866(v=ws.10).aspx

于 2013-02-08T14:16:59.277 に答える
-3

トランザクションは 1 つの接続のみに関連付けられているため、これが可能であるとは思えません。この動作を実現するために必要なのは、n 秒ごとにログ データベースを読み取り続ける並列プロシージャ (つまり、同時スレッド) を用意することです。

于 2013-02-08T13:57:58.243 に答える