2013-09-06 4 views
6

Je tente d'appeler une procédure stockée dans SQL Server 2008 et de stocker les données récupérées dans une table temporaire locale.Le fournisseur OLe DB "SQLNCLI" pour le serveur lié n'a pas pu démarrer une transaction distribuée

Lorsque je tente de l'exécuter, je reçois l'erreur suivante:

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

Mon code est le suivant:

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

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

Répondre

3

serveur lié n'a pas pu commencer une erreur transaction distribuée sont à cause de problèmes dans MSDTC (MS coordinator de transaction distribuée). Des problèmes peuvent découler d'un certain nombre de problèmes. Y compris MSDTC ne pas en cours d'exécution, étant bloqué par le pare-feu, et d'autres.

Si vous avez besoin de transactions, vous devez déboguer le problème à peu près vous-même puisqu'il est environnemental. Si vous pouvez réécrire pour éviter d'avoir à effectuer une transaction, votre vie sera plus simple. Juste pour vous assurer qu'il s'agit d'un problème MSDTC, écrivez une requête simple qui ne dépendra pas de MSDTC. par exemple.

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 

Si cela fonctionne, sans aucun doute son MSDTC (et peut-être un problème évitable)

- a ajouté. J'ai passé un peu de temps à chercher le débogage MSDTC. http://www.sqlwebpedia.com/content/msdtc-troubleshooting était assez bon comme http://www.mssqltips.com/sqlservertip/2083/troubleshooting-sql-server-distributed-transactions-part-1-of-2/ togehter ils couvrent à peu près tout ce que je me souviens d'avoir à déboguer pour les problèmes MSDTC (et d'autres aussi).

7

Vous pouvez éviter d'utiliser les transactions distribuées pour le serveur lié en définissant l'option serveur 'la promotion de la transaction proc à distance' 'false':

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

Here's the same issue

+0

Cela a fonctionné pour moi! Merci de faire un lien vers l'autre réponse. Était curieux de savoir quel était l'inconvénient de définir l'attribut était. Je pense que tant que je ne change pas de données à la fois sur mes serveurs locaux et liés, puis que j'ai besoin de restaurer toutes ces transactions, je devrais être bon. – MikeTeeVee

+0

Gareautrain !! ....... –

Questions connexes