Laboratoire Microsoft |  Blog |  Webcast |  Students Club |  FaqXP  |  CertifExpress 
 Le Forum de Référence sur les Technologies Microsoft - http://www.forum-microsoft.org

db-link a moitié foireux

Un forum dédié au serveur de Base de Données Made in Microsoft

Modérateurs: ygainche, Thierry DEMAN (MVP Exchan, Modérateurs_Applicatifs

db-link a moitié foireux

Messagepar nicolas_lepot sur Jeu 03 Avr 2008, 17:33

bonjour,

dans une config avec deux windows 2003 server et deux sql server 2000 sp4,
via SQL Query Analyser, je peux exécuter parfaitement en local sur un serveur :

Code: Tout sélectionner
INSERT test VALUES (1,1,'aaa');
select * from test;


pour travailler directement dans une bd locale, ou:

Code: Tout sélectionner
INSERT sgbd03.BD_TEST.dbo.test VALUES (11,1,'aaa');
select * from sgbd03.BD_TEST.dbo.test;


pour travailler dans la bd du serveur sgbd03.

Maintenant, si au lieu d'utiliser le SQL Query Analyser, je place
INSERT sgbd03.BD_TEST.dbo.test VALUES (11,1,'aaa'); dans un trigger,
j'obtiens l'erreur :

Code: Tout sélectionner
Server: Msg 7391, Level 16, State 1, Procedure TR_TEST_LINK, Line 16
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: La nouvelle transaction ne peut pas s'inscrire dans le coordinateur de transactions spécifié. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].




J'ai testé ceci sans résultat :

- mettre la requete du trigger avec BEGIN DISTRIBUTED TRANSACTION
- vérifier la config DCOM sur des deux serveurs ainsi : http://www.howtogeek.com/howto/windows/ ... -2003-sp2/


J'arrive pas a comprendre pourquoi cela fonction via le SQL Query analyser et pas via mon trigger...

merci d'avance pour votre aide.

nico
nicolas_lepot
Full Member
Full Member
 
Messages: 151
Inscrit le: Sam 20 Mai 2006, 10:33

Messagepar nicolas_lepot sur Ven 04 Avr 2008, 17:17

hello,

J'ai trouvé. :) :) :) :) Si cela intéresse qq1 :

Mon problème était que j'avais un serveur en tant que membre d'un domaine et l'autre en workgroup.

Manifestement, il n'est pas possible d'utiliser correctement DTC dans ce cas de figure. Même si le compte admin local sur les deux serveurs est le même (login/password); Même si les sql server sont configurés tous les en mode mixte; Même si MSDTC est configuré sur les deux serveurs avec "aucune authentification requise"...

En ayant les deux serveurs en tant que membre du domaine, cela fonctionne.
Je n'ai pas testé avec les deux machines en workgroup mais j'imagine que ça marche aussi...

Malgré que cela fonctionne, je suis quand même embêté de devoir mettre le serveur en tant que membre du domaine. Quand mon projet passera en production, ce ne sera pas possible. Aussi, je me demande si qq1 en connait plus sur ce problème ??? et si je ne pourrais pas créer un compte utilisateur commun entre les deux serveurs qui serait utilisé pour que les sql server puissent communiquer sans devoir s'inquiéter ???

nico
nicolas_lepot
Full Member
Full Member
 
Messages: 151
Inscrit le: Sam 20 Mai 2006, 10:33


Retourner vers SQL Server

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 0 invités



Accueil | News | Articles | Tips | Outils | FAQ XP | Certification | Easters Eggs
Essentiels | Top Sites | Glossaire | Vidéos | Whitepapers | Essentiels | Boîte à Scripts
Conditions d'utilisation é Copyright | Respect de la vie privée