2009-10-07 3 views
1

Je voudrais vous présenter mon problème lié à la réplication bidirectionnelle SQL Server 2005. De quoi ai-je besoin? Mon chef d'équipe veut résoudre un de nos problèmes en utilisant la réplication bidirectionnelle entre deux bases de données, chacune utilisée par une application différente. Une application crée des enregistrements dans la table A, les modifications doivent être répliquées dans la deuxième base de données dans une copie de la table A. Lorsque les données du deuxième serveur sont modifiées, ces modifications doivent être propagées vers le premier serveur. J'essaie d'obtenir une réplication transactionnelle bidirectionnelle entre deux bases de données sur un serveur, qui exécute SQL Server 2005. J'ai réussi à configurer cela en utilisant des scripts, 2 publications et 2 abonnements en lecture seule avec détection de bouclage. La base de données Distributtion est créée, l'édition sur les deux bases de données est activée. Le distributeur et l'éditeur sont en place. Nous utilisons certaines règles pour contrôler, quels enregistrements seront répliqués, nous devons donc appeler nos procédures stockées personnalisées lors de la réplication. Ainsi, les articles sont configurés pour utiliser la mise à jour, insérer et supprimer des procédures stockées personnalisées.Enregistrement de mise à jour de réplication bidirectionnelle

Jusqu'ici tout va bien, mais?

Tout fonctionne correctement, les modifications sont en cours de réplication jusqu'à ce que les mises à jour soient effectuées simultanément sur les deux tables ou avant que les modifications ne soient répliquées (ce qui prend environ 3 à 6 secondes). Les deux enregistrements se retrouvent alors avec des valeurs différentes.

UPDATE db1.dbo.TestTable SET Col = 4 WHERE ID = 1 
UPDATE db2.dbo.TestTable SET Col = 5 WHERE ID = 1 

résultats à:

db1.dbo.TestTable COL = 5

db2.dbo.TestTable COL = 4

Mais nous voulons avoir la dernière modification gagner la réplication. S'il vous plaît, y a-t-il un moyen de résoudre mon problème? Comment puis-je garantir les mêmes valeurs dans les deux enregistrements? Ou y at-il une solution plus facile que ce type de réplication?

Je peux fournir un exemple de script de réplication que j'utilise.
Je me réjouis pour vous des idées,
Mirek

Répondre

0

Je pense que l'ajout champ dateUpdated sur les deux tables pourrait aider. De cette façon, dans votre code de réplication, un enregistrement ne serait mis à jour que si dateUpdated est supérieur à celui déjà stocké.

Ce champ dateUpdated serait évidemment stocker le datetime lorsque l'enregistrement original a été mis à jour, pas lorsque la réplication a été réalisée

+0

Mais cela signifierait que je dois faire toutes les mises à jour avec colonne mise à jour qui contient cette valeur datetime, je suis J'ai raison? – Mirek

+0

@Mirek: si vous suivez les conseils de kristof, vous aurez besoin d'un trigger 'INSTEAD OF' avec la clause' NOT FOR REPLICATION'. – filiprem

Questions connexes