0

サーバーAにinstead of triggerを作成しました。このサーバーでは、プロシージャーが呼び出され、リンクされたサーバー(サーバーB)の別のプロシージャーが呼び出されます。トリガーからリンクされたサーバーを呼び出す

トリガ(A) - >手順(A) - >手順(B)

しかし、トリガーが実行されるとき、それは次のようなエラースロー:手順(A):私はこれを行うと

OLE DB provider "SQLNCLI11" for linked server "xxx" returned message "The partner transaction manager has disabled its support for remote/network transactions.". Msg 7391, Level 16, State 2, Line 1 The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "xxx" was unable to begin a distributed transaction.

を - >手順(B)それは完全に動作します。理由は何でしょうか?

どうすればこの問題を解決できますか?分散クエリはリンクサーバークエリと異なるのですか?あなたがトリガー内でリンクサーバーを使用する場合は、DTCを使用する必要が

+0

ローカルのService Brokerを使用しますが、両方のマシン上でMSDTCを構成してしまったことがありますか? –

+0

@ M.Ali、それが設定されていない場合は、プロシージャ(サーバA)→プロシージャ(サーバB)を呼び出すことになりますか?それ以来、 – Sher

答えて

0

(それがうまく行っていないと、任意の接続に問題がある場合は、あなたのトランザクションが中止されるようお勧めしません)

または

あなたの手順( A)いくつかのキュー・テーブルを移入することができ、その後、いくつかのスケジュールされたタスクは、キュー・テーブルを読み、手順B 0をトリガする手順B.

又は

使用複製またはCDC(変更データキャプチャ)+スケジュールされたタスクを実行することができますnは、リモートサーバー

または

+0

ありがとうございます。 2と3は即座に実行しなければならず、仕事はスケジュール通りに動作し、proc AとBの両方がパラメータを受け入れる必要があるため動作しません。ステップ1と4をどのように使うことができますか?例が見つかりませんでした。そして、なぜこの問題が発生するのでしょうか、私たちはサーバーをリンクしています。 – Sher

+0

Sher、つまり、設計通りです。「トランザクションが明示的に指定されていなくても、トリガーでラップされた分散クエリも分散トランザクションとして扱われます。 https://support.microsoft.com/en-us/kb/274348 – Anton

+0

(4)については、https://social.msdn.microsoft.com/Forums/sqlserver/en-US/70a184f4-6c29- 441e-85de-b2bc553fee4f/how-to-run-insertupdate-statement-to-linked-server-sql-server-broker?forum = sqlservicebroker – Anton

関連する問題