9

リンク サーバー上のプロシージャを呼び出すには、SQL Server 2005 プロシージャを変更する必要があります。私のローカル プロシージャは、常にトランザクション内で、他のいくつかのプロシージャによって呼び出されます。

リンク サーバーへの呼び出しを追加すると、実行時に、OLE DB プロバイダーが分散トランザクションを開始できなかったことを示すメッセージが表示されます。

私の知る限り、リモート プロシージャはデータベースの変更を行いません。トランザクション内にある必要はないため、分散トランザクションは必要ありません。

しかし、リンク サーバーへのトランザクションの拡張をオフにする方法がないと、私にはそのオプションがないと思われます。これは正しいです?

(これらのプロシージャをリファクタリングして、リンク サーバーへの呼び出しがすべてのトランザクションの外側の親プロシージャで行われるようにすることで、問題を回避できます。ただし、論理的には、この子プロシージャ内に属しているため、そこに保持したいと思います。)

皆さんありがとう。

4

1 に答える 1

12

SQL Server 2008 以降を使用している場合、これを制御するサーバー オプションがあることがわかります。

EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false'

( sp_serveroption (Transact-SQL)を参照してください)。

しかし、私はそのオプションがない SQL Server 2005 を使用していました。そのため、さらに調査したところ、使用しているマシンで MSDTC のネットワーク トランザクションが無効になっていることがわかりました。これが原因で、リモート トランザクションが失敗していました。DBAによってこれを有効にすることができました。

于 2013-10-18T13:27:01.680 に答える