Question

J'ai deux serveurs, le premier avec SQL Server 2005 et le second avec SQL Server 2000. Je souhaite insérer des données de 2005 à 2000 et le faire de manière non synchronisée (sans transaction distribuée, car "enregistrer" transaction "sont utilisés).

Une fois les informations insérées dans les tables du serveur 2000, certains déclencheurs au lieu de sont activés pour traiter ces informations.

Dans ce scénario, j'ai décidé d'utiliser Service Broker. J'ai donc une procédure stockée pour insérer des informations d'un serveur à un autre et cela fonctionne parfaitement.

Mais lorsque j'appelle cette procédure à partir de la procédure de message du processus de file d'attente cible, elle échoue et je ne sais pas pourquoi !!

De plus, je sais que cela fonctionne car, lorsque j'utilise la même structure (files d'attente et procédures stockées), je copie une base de données à une autre sur le même serveur SQL 2005.

Donc, cela n’échoue que sur plusieurs machines, tout le monde sait pourquoi ou comment obtenir plus d’informations sur la cause de la défaillance? Ou comment insérer des données non synchronisées (je ne peux pas utiliser l'agent SQL parce que je veux insérer les informations plus souvent qu'une minute).

Était-ce utile?

La solution

Le problème habituel est que la procédure SSB utilise WAITFOR et que WAITFOR est incompatible avec les transactions distribuées. La seule solution consiste à supprimer le WAITFOR (RECEIVE) et à utiliser un RECEIVE ordinaire.

Autres conseils

Pensez à utiliser un serveur lié au lieu de service broker. Avec un serveur lié, vous pouvez:

insert into LinkedServer.The2000Db.dbo.The2000Table
(col1, col2, col3)
select col1, col2, col3
from The2005Table
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top