-
db link erreur
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 :
INSERT test VALUES (1,1,'aaa');
select * from test;
pour travailler directement dans une bd locale, ou:
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 :
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/windo...rver-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
-
Il faut activer MSDTC sur tous les serveurs concourants à la transaction distribuée.
A +
-
salut,
merci pour ta piste.
sur les deux serveurs, le service DTC tourne. il est démarré automatiquement au démarrage des serveurs avec l'utilisateur "service réseau"... Je crois que pour cette piste, c'est bon.
par ailleurs, je vois qu'il y a un log pour le service DTC dans C:\WINDOWS\system32\MsDtc. J'y trouverai peut être la raison pour laquelle DTC veut bien fonctionner dans un cas et pas dans l'autre... Mais le fichier .log est en hexa... il y a un outil spécial pour le lire ?
-
hello,
J'ai trouvé.:D:D:D 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