2

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 秒後にまったく同じエラー メッセージが表示されます。

ここからさらに調査する方法がわかりません。ファイアウォールの問題でしょうか?

4

1 に答える 1