Question

J'ai supprimé par erreur toutes les lignes d'une table MS SQL 2000 utilisée dans la réplication de fusion (la table se trouve sur l'éditeur). J'ai ensuite composé le problème en utilisant une opération DTS pour extraire les lignes d'une base de données de sauvegarde et repeupler la table.

Ceci a créé le problème suivant: L'opération de suppression a marqué les lignes à supprimer sur les clients, mais l'opération DTS contourne les déclencheurs de réplication afin que les lignes importées ne soient pas marquées pour l'insertion sur les abonnés. En effet, les abonnés perdent les données alors qu'elles se trouvent sur l'éditeur.

J'ai donc pensé "pas de souci". Je vais simplement supprimer les lignes à nouveau, puis les ajouter correctement via une instruction insert et elles seront ensuite marquées pour insertion sur les abonnés.

C'est mon problème: Je ne peux pas supprimer les lignes DTS parce que je reçois un "Impossible d'insérer une ligne de clé en double dans l'objet" MSmerge_tombstone "avec l'index unique" uc1MSmerge_tombstone "." Erreur. Ce que je voudrais faire est en quelque sorte supprimer les lignes de la table en contournant le déclencheur de réplication de fusion. Est-ce possible? Je ne souhaite pas supprimer ni refaire la réplication car les abonnés sont au moins 50 appareils Windows Mobile.

Edition: j'ai essayé la commande Truncate Table. Cela donne l'erreur suivante: "Impossible de tronquer la table xxxx car elle est publiée pour la réplication"

.
Était-ce utile?

La solution 6

Merci pour les astuces ... J'ai finalement trouvé une solution:

J'ai supprimé le déclencheur de suppression de fusion de la table
Supprimé les lignes DTSed
Recréé le déclencheur de suppression de la fusion
J'ai ajouté correctement mes lignes en utilisant une instruction insert.

J'étais un peu inquiet à l'idée de manipuler les déclencheurs de fusion, mais tout semble fonctionner correctement.

Autres conseils

Avez-vous essayé de tronquer la table?

Vous devrez peut-être tronquer la table et réinitialiser le champ ID à 0 si vous avez besoin du même ID pour les lignes insérées. Sinon, tronquez et ça devrait aller.

Vous pouvez également envisager de supprimer temporairement l'index unique et de l'ajouter à nouveau lorsque vous avez terminé.

Rechercher dans sp_mergedummyupdate

La création d'un deuxième tableau serait-elle une option? Vous pouvez créer une deuxième table, la remplir avec les données nécessaires, ajouter les contraintes / index, puis supprimer la première table et renommer votre deuxième table. Cela devrait vous donner les données avec les bonnes clés ... et cela devrait être composé d'instructions SQL autorisées à ralentir la réplication. Ce n’est tout simplement pas ce qui se fait de mieux en termes de performances ... et imposerait certainement des risques.

Je n'ai pas essayé cela de première main dans un environnement répliqué ... mais cela vaut au moins la peine d'essayer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top