2013-09-06 116 views
6

SQL Server 2008でストアドプロシージャを呼び出して、取得したデータをローカルの一時テーブルに格納しようとしています。私はそれを実行しようとするとOLe DBプロバイダ "SQLNCLI"が、分散トランザクションを開始できませんでした。

は、私は次のエラーが表示されます、次のように

The operation could not be completed because OLe DB provider "SQLNCLI" for linked server was unable to begin a distributed transaction

私のコードは次のとおりです。

create table #temp(
    col1 as int, 
    col2 as varchar(50) 
) 

insert into #temp 
exec [192.168.0.9].[db1].[dbo].[tablename] @usr_id=3 

答えて

3

リンクサーバーエラーが原因である分散トランザクションを開始することができませんでしたMSDTC(MS分散トランザクションコーディネータ)の問題問題はいくつかの問題から生じる可能性があります。実行していないMSDTC、ファイアウォールによってブロックされているものなどを含みます。

トランザクションが必要な場合は、それが環境であるため、ほとんど問題をデバッグする必要があります。トランザクションを必要としないように書き直すことができれば、人生はより簡単になります。それがMSDTCの問題であることを確認するために、MSDTCに依存しない簡単なクエリを記述してください。例えばこれが動作する場合

create table #temp(col1 as int, col2 as varchar(50)) 

insert into #temp 
select col1, col2 from [192.168.0.9].[db1].[dbo].[tablename] where usr_id=3 

は、その確かにMSDTC(そしておそらく回避問題)

は - これを追加しました。少し時間をかけてMSDTCのデバッグを探していました。 http://www.sqlwebpedia.com/content/msdtc-troubleshootingは、http://www.mssqltips.com/sqlservertip/2083/troubleshooting-sql-server-distributed-transactions-part-1-of-2/のようにかなり優れていました。私はMSDTCの問題(と他のものも)のためにデバッグしなければならないことを思い出すことができます。

7

あなたは「偽」に、サーバーオプション「リモートプロシージャ・トランザクションプロモーション」を設定することで、リンクサーバー用の分散トランザクションを使用して防ぐことができます。

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

Here's the same issue

+0

これは私のために働きました!他の答えにリンクしていただきありがとうございます。属性を設定することの欠点は何か不思議でした。私はローカルサーバーとリンクサーバーの両方でデータを変更しておらず、後でそれらのトランザクションをすべてロールバックする必要がある限り、それでいいと思います。 – MikeTeeVee

+0

ライフセーバー!! ....... –

関連する問題