SQL Server 2008「server1」が別の SQL サーバー「server2」にリンクされたセットアップがあります。「server2」には、「server1」から問題なくクエリできるストアド プロシージャがあります。
EXEC [server2].[xx].[dbo].[sp] param
しかし、リンク サーバー SP からデータを挿入し始めるとすぐに、問題が発生します。次のコードを使用します。
INSERT INTO server1.dbo.table (column1, column2, ...)
EXEC [server2].[xx].[dbo].[sp] param
開始したとき、次のような「既知の」エラーを受け取りました。
リンク サーバー "linkedserver" の OLE DB プロバイダー "SQLNCLI" から、"パートナー トランザクション マネージャーがリモート/ネットワーク トランザクションのサポートを無効にしました。" というメッセージが返されました。メッセージ 7391、レベル 16、状態 2、行 2 リンク サーバー "linkedserver" の OLE DB プロバイダー "SQLNCLI" が分散トランザクションを開始できなかったため、操作を実行できませんでした。
同様の質問で述べたように: リンクされたストアド プロシージャからローカル テーブルに挿入する リンク サーバーからストアド プロシージャの結果を挿入する
そのため、両方のサーバーで MSDTC を構成しました。クエリは 20 秒間実行され、エラー メッセージで中止されます。
リンク サーバー "server2" の OLE DB プロバイダー "SQLNCLI10" から、"アクティブなトランザクションはありません" というメッセージが返されました。メッセージ 7391、レベル 16、状態 2、行 14 リンク サーバー "server2" の OLE DB プロバイダー "SQLNCLI10" が分散トランザクションを開始できなかったため、操作を実行できませんでした。
以前のエラーとは対照的に、Windows イベント ログには何もありません。
まず、ローカル テーブルへの INSERT のために、私のクエリは分散トランザクションと見なされますか?
次に、次のような分散クエリを実行しようとすると:
begin distributed tran
select * from [server2].master.sys.sysprocesses
commit tran
ちょうど 20 秒後にまったく同じエラー メッセージが表示されます。
ここからさらに調査する方法がわかりません。ファイアウォールの問題でしょうか?