Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb transmission données SQL server -> mysql

1 réponse
Avatar
berthome
Bonjour,

Voici mon problème.

J ai un serveur SQL Server 2000.
Je souhaite insérer dans une table d'une base hébergée sous Mysql par un
serveur Linux.

J ai donc créé un serveur lié pour la base MySQL.

Un insert par :
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE')
VALUES('test');
marche bien.





Je souhaite que cet insert dans la base distante se fasse dans un
trigger d update sur une de mes tables.


create trigger TiggerTest on maTABLE
AFTER INSERT
AS
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE') VALUES('test');


Le message suivant s'affiche :
Msg 7390, Niveau 16, État 2, Procédure reminder2, Ligne 7
L'opération demandée n'a pas pu être effectuée, car le fournisseur OLE
DB "MSDASQL" du serveur lié 'MySQL' ne prend pas en charge l'interface
de transaction requise.


De meme le script

BEGIN TRAN T1
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE')
VALUES('test');
COMMIT TRAN T1;
END_TRAN

provoque la même erreur.

Je soupconne le trigger de créer une transaction.
Ceci peut venir du composant DTC (Distributed Transaction Coordinator)
mais ceci n existe pas sous Linux, à ma connaissance.



Quelqu un sait il résoudre ce problème?

1 réponse

Avatar
Fred BROUARD
C'est parfaitement normal car le code trigger est situé à l'intérieur de
la transaction. Pour faire ce que vous voulez faire, il faut
impérativement utiliser une transaction distribuée en utilisant MS DTC.
Mais comme je crois que MS DTC n'existe pas sous Linux, il vous faut
trouver un coordinateur de transactions distribuées inter système
(opérant à la fois sous Linux et Windows)....

Et n'oubliez pas de spécifier que la transaction doit être distribuée
(code amont) par :

BEGIN DISTRIBUTED TRANSACTION
...
COMMIT TRANSACTION

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************



berthome a écrit :
Bonjour,

Voici mon problème.

J ai un serveur SQL Server 2000.
Je souhaite insérer dans une table d'une base hébergée sous Mysql par un
serveur Linux.

J ai donc créé un serveur lié pour la base MySQL.

Un insert par :
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE')
VALUES('test');
marche bien.





Je souhaite que cet insert dans la base distante se fasse dans un
trigger d update sur une de mes tables.


create trigger TiggerTest on maTABLE
AFTER INSERT
AS
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE')
VALUES('test');


Le message suivant s'affiche :
Msg 7390, Niveau 16, État 2, Procédure reminder2, Ligne 7
L'opération demandée n'a pas pu être effectuée, car le fournisseur OLE
DB "MSDASQL" du serveur lié 'MySQL' ne prend pas en charge l'interface
de transaction requise.


De meme le script

BEGIN TRAN T1
INSERT OPENQUERY (MySQL, 'SELECT id FROM maBDD.maTABLE')
VALUES('test');
COMMIT TRAN T1;
END_TRAN

provoque la même erreur.

Je soupconne le trigger de créer une transaction.
Ceci peut venir du composant DTC (Distributed Transaction Coordinator)
mais ceci n existe pas sous Linux, à ma connaissance.



Quelqu un sait il résoudre ce problème?