OVH Cloud OVH Cloud

alexandre

5 réponses
Avatar
transaction distribuée et MSDASQL
Bonjour =E0 tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre =E0
jour des donn=E9es d'une table sur B, =E0 partir de donn=E9es
d'une table de m=EAme structure sur B.

J'ai configur=E9 sur A mon serveur B, comme =E9tant un serveur
li=E9, et mon trigger attach=E9 =E0 ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je v=E9rifie la syntaxe, pas de probl=E8me, puis j'applique.

Voici le message d'erreur que je re=E7ois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai cr=E9=E9e mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribu=E9e]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'op=E9ration
demand=E9e ne peut pas =EAtre effectu=E9e car le fournisseur OLE
DB 'MSDASQL' n'a pas r=E9ussi =E0 d=E9marrer de transaction
distribu=E9e."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un probl=E8me de transaction distribu=E9e . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribu=E9es.

Si quelqu'un avait une id=E9e, elle serait bienvenue! Merci
d'avance.

5 réponses

Avatar
Fred Pichaut
Hello,



Vérifier que MSDTC (Distributed Transaction Coordinator) est bien démarré
sur le serveur A.



Vous pouvez aussi regarder cet article:

http://support.microsoft.com/?id06212



Cdlt



Fred


"transaction distribuée et MSDASQL"
wrote in message news:409f01c4aae2$ff4be030$
Bonjour à tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre à
jour des données d'une table sur B, à partir de données
d'une table de même structure sur B.

J'ai configuré sur A mon serveur B, comme étant un serveur
lié, et mon trigger attaché à ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je vérifie la syntaxe, pas de problème, puis j'applique.

Voici le message d'erreur que je reçois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai créée mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribuée]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'opération
demandée ne peut pas être effectuée car le fournisseur OLE
DB 'MSDASQL' n'a pas réussi à démarrer de transaction
distribuée."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un problème de transaction distribuée . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribuées.

Si quelqu'un avait une idée, elle serait bienvenue! Merci
d'avance.
Avatar
alexandre
Merci beaucoup, j'ai vérifié dans les options des deux
gestionnaires de services par défaut, et DTC s'y trouve bien.

J'ai changé de technique et j'ai, à présent, déclaré sur B
mon serveur A comme étant lié. J'ai créé un trigger sur une
table en B.

Ansi, lors d'une modification de cette table, je n'ai plus
de message d'erreur, mais simplement, Entreprise Manager
qui ne répond plus ou bien se fige.

En vérifiant, j'ai l'impression que j'ai une transaction
qui débute mais ne s'arrete pas! :-(

voici mon code:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end
SET XACT_ABORT OFF
END



Merci d'avance pour les éclairements que vous m'apporterez!

Alexandre


-----Message d'origine-----
Hello,



Vérifier que MSDTC (Distributed Transaction Coordinator)


est bien démarré
sur le serveur A.



Vous pouvez aussi regarder cet article:

http://support.microsoft.com/?id06212



Cdlt



Fred


"transaction distribuée et MSDASQL"



wrote in message


news:409f01c4aae2$ff4be030$
Bonjour à tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre à
jour des données d'une table sur B, à partir de données
d'une table de même structure sur B.

J'ai configuré sur A mon serveur B, comme étant un serveur
lié, et mon trigger attaché à ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je vérifie la syntaxe, pas de problème, puis j'applique.

Voici le message d'erreur que je reçois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai créée mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribuée]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'opération
demandée ne peut pas être effectuée car le fournisseur OLE
DB 'MSDASQL' n'a pas réussi à démarrer de transaction
distribuée."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un problème de transaction distribuée . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribuées.

Si quelqu'un avait une idée, elle serait bienvenue! Merci
d'avance.


.



Avatar
Fred Pichaut
Pour savoir si un transaction existe dans ine base (pubs par exemple)

dbcc opentran(pubs)



je ne vois pas bien le rapport avec enterprise manager?



L'opération s'effectue correctement sur les deux serveurs?






"alexandre" wrote in message
news:327b01c4aba0$b5c28e00$
Merci beaucoup, j'ai vérifié dans les options des deux
gestionnaires de services par défaut, et DTC s'y trouve bien.

J'ai changé de technique et j'ai, à présent, déclaré sur B
mon serveur A comme étant lié. J'ai créé un trigger sur une
table en B.

Ansi, lors d'une modification de cette table, je n'ai plus
de message d'erreur, mais simplement, Entreprise Manager
qui ne répond plus ou bien se fige.

En vérifiant, j'ai l'impression que j'ai une transaction
qui débute mais ne s'arrete pas! :-(

voici mon code:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end
SET XACT_ABORT OFF
END



Merci d'avance pour les éclairements que vous m'apporterez!

Alexandre


-----Message d'origine-----
Hello,



Vérifier que MSDTC (Distributed Transaction Coordinator)


est bien démarré
sur le serveur A.



Vous pouvez aussi regarder cet article:

http://support.microsoft.com/?id06212



Cdlt



Fred


"transaction distribuée et MSDASQL"



wrote in message


news:409f01c4aae2$ff4be030$
Bonjour à tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre à
jour des données d'une table sur B, à partir de données
d'une table de même structure sur B.

J'ai configuré sur A mon serveur B, comme étant un serveur
lié, et mon trigger attaché à ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je vérifie la syntaxe, pas de problème, puis j'applique.

Voici le message d'erreur que je reçois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai créée mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribuée]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'opération
demandée ne peut pas être effectuée car le fournisseur OLE
DB 'MSDASQL' n'a pas réussi à démarrer de transaction
distribuée."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un problème de transaction distribuée . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribuées.

Si quelqu'un avait une idée, elle serait bienvenue! Merci
d'avance.


.



Avatar
alexandre
Je vous remercie de cette commande que je ne connaissais
pas! (je débute en SQL Server :-) )

Alors le rapport avec Entreprise Manager, c'est que
j'utilise l'invite graphique pour modifier et insérer des
champs dans ma table qui contient le trigger, mais quand je
ferme la fenêtre de "modification de la table" dans
laquelle j'ai insérée une nouvelle ligne par exemple, là,
Entreprise Manager n'est pas content et ne réponds plus.

Ceci est donc dû au fait qu'il execute une transaction et
ne la termine pas!!! En effet, en tapant "dbcc
opentran(ma_table)" dans l'analyseur de requetes, suite au
"blocage" de Entreprise Manager, j'obtiens qu'il y a une
transaction qui a pour nom "implicit_transaction", avec une
heure de début mais pas d'heure de fin!

Je suppose donc que mon trigger déclenche une transaction
qui ne s'arrete pas, sauf en rebootant le serveur!


-----Message d'origine-----
Pour savoir si un transaction existe dans ine base (pubs


par exemple)

dbcc opentran(pubs)



je ne vois pas bien le rapport avec enterprise manager?



L'opération s'effectue correctement sur les deux serveurs?






"alexandre" wrote in


message
news:327b01c4aba0$b5c28e00$
Merci beaucoup, j'ai vérifié dans les options des deux
gestionnaires de services par défaut, et DTC s'y trouve bien.

J'ai changé de technique et j'ai, à présent, déclaré sur B
mon serveur A comme étant lié. J'ai créé un trigger sur une
table en B.

Ansi, lors d'une modification de cette table, je n'ai plus
de message d'erreur, mais simplement, Entreprise Manager
qui ne répond plus ou bien se fige.

En vérifiant, j'ai l'impression que j'ai une transaction
qui débute mais ne s'arrete pas! :-(

voici mon code:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end
SET XACT_ABORT OFF
END



Merci d'avance pour les éclairements que vous m'apporterez!

Alexandre


-----Message d'origine-----
Hello,



Vérifier que MSDTC (Distributed Transaction Coordinator)


est bien démarré
sur le serveur A.



Vous pouvez aussi regarder cet article:

http://support.microsoft.com/?id06212



Cdlt



Fred


"transaction distribuée et MSDASQL"



wrote in message


news:409f01c4aae2$ff4be030$
Bonjour à tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre à
jour des données d'une table sur B, à partir de données
d'une table de même structure sur B.

J'ai configuré sur A mon serveur B, comme étant un serveur
lié, et mon trigger attaché à ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je vérifie la syntaxe, pas de problème, puis j'applique.

Voici le message d'erreur que je reçois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai créée mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribuée]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'opération
demandée ne peut pas être effectuée car le fournisseur OLE
DB 'MSDASQL' n'a pas réussi à démarrer de transaction
distribuée."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un problème de transaction distribuée . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribuées.

Si quelqu'un avait une idée, elle serait bienvenue! Merci
d'avance.


.





.



Avatar
alexandre
comment réaliser un beau trigger qui puisse agir sur un
serveur SQL distant, en fermant proprement la transaction
pour eviter de devoir rebooter le serveur?
merci


-----Message d'origine-----
Je vous remercie de cette commande que je ne connaissais
pas! (je débute en SQL Server :-) )

Alors le rapport avec Entreprise Manager, c'est que
j'utilise l'invite graphique pour modifier et insérer des
champs dans ma table qui contient le trigger, mais quand je
ferme la fenêtre de "modification de la table" dans
laquelle j'ai insérée une nouvelle ligne par exemple, là,
Entreprise Manager n'est pas content et ne réponds plus.

Ceci est donc dû au fait qu'il execute une transaction et
ne la termine pas!!! En effet, en tapant "dbcc
opentran(ma_table)" dans l'analyseur de requetes, suite au
"blocage" de Entreprise Manager, j'obtiens qu'il y a une
transaction qui a pour nom "implicit_transaction", avec une
heure de début mais pas d'heure de fin!

Je suppose donc que mon trigger déclenche une transaction
qui ne s'arrete pas, sauf en rebootant le serveur!


-----Message d'origine-----
Pour savoir si un transaction existe dans ine base (pubs


par exemple)

dbcc opentran(pubs)



je ne vois pas bien le rapport avec enterprise manager?



L'opération s'effectue correctement sur les deux serveurs?






"alexandre" wrote in


message
news:327b01c4aba0$b5c28e00$
Merci beaucoup, j'ai vérifié dans les options des deux
gestionnaires de services par défaut, et DTC s'y trouve bien.

J'ai changé de technique et j'ai, à présent, déclaré sur B
mon serveur A comme étant lié. J'ai créé un trigger sur une
table en B.

Ansi, lors d'une modification de cette table, je n'ai plus
de message d'erreur, mais simplement, Entreprise Manager
qui ne répond plus ou bien se fige.

En vérifiant, j'ai l'impression que j'ai une transaction
qui débute mais ne s'arrete pas! :-(

voici mon code:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET XACT_ABORT ON
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end
SET XACT_ABORT OFF
END



Merci d'avance pour les éclairements que vous m'apporterez!

Alexandre


-----Message d'origine-----
Hello,



Vérifier que MSDTC (Distributed Transaction Coordinator)


est bien démarré
sur le serveur A.



Vous pouvez aussi regarder cet article:

http://support.microsoft.com/?id06212



Cdlt



Fred


"transaction distribuée et MSDASQL"



wrote in message


news:409f01c4aae2$ff4be030$
Bonjour à tous,

J'ai deux serveurs SQL A et B, et je souhaiterais mettre à
jour des données d'une table sur B, à partir de données
d'une table de même structure sur B.

J'ai configuré sur A mon serveur B, comme étant un serveur
lié, et mon trigger attaché à ma table A est ainsi fait :

Citation:
CREATE TRIGGER [trigger1] ON [dbo].[ma_table_A]
FOR INSERT, UPDATE, DELETE
AS
if (columns_updated() & 3)>0
begin
insert into [mon_serveur_B].[ma_base_B].[dbo].[ma_table_B]
select mon_champ_1, mon_champ_2 from inserted
end


Je vérifie la syntaxe, pas de problème, puis j'applique.

Voici le message d'erreur que je reçois lorsque je modifie
la table "ma_table_A" sur laquelle j'ai créée mon trigger:

Citation:
"[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB
provider returned message: [Microsoft][ODBC SQL Server
Driver] Erreur de transaction distribuée]
[Microsoft][ODBC SQL Server Driver][SQL Server]Trace de
l'erreur OLE DB [OLE/DB Provider 'MSDASQL' ITransactionJoi
Join Transaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server] L'opération
demandée ne peut pas être effectuée car le fournisseur OLE
DB 'MSDASQL' n'a pas réussi à démarrer de transaction
distribuée."


Donc, comme le confirme le message d'erreur, je me doute
qu'il s'agit d'un problème de transaction distribuée . J'ai
pourtant configurer mon serveur A pour qu'il accepte les
transactions distribuées.

Si quelqu'un avait une idée, elle serait bienvenue! Merci
d'avance.


.





.



.