Instructions de mise à jour peuvent être répliquées comme paires DELETE/INSERT


Résumé


Si une colonne qui fait partie d’une contrainte unique est mis à jour, puis SQL Server implémente la mise à jour sous la forme d’une « différé mise à jour », c'est-à-dire sous la forme d’une paire de Supprimer/Insérer des opérations. Cette « mise à jour différée » provoque la réplication à envoyer d’une paire de Supprimer/ instructionsINSERT aux abonnés. Il existe également d’autres situations susceptibles de provoquer une mise à jour différée. Par conséquent, toute logique métier que vous implémentez dans des déclencheurs de mise à jour des procédures stockées personnalisées sur l’abonné doit également être inclus dans la Supprimer/Insérer des déclencheurs ou des procédures stockées personnalisées.

Plus d'informations


Le comportement par défaut dans la réplication transactionnelle est d’utiliser
Insertion, mise à jour et Supprimer des procédures stockées personnalisées pour appliquer les modifications au niveau des abonnés.

Instructions INSERT effectuées sur l’éditeur sont appliquées aux abonnés via un appel de procédure Insertion stocké. De même, une instruction DELETE est appliquée via un appel de procédure Supprimer stockées.

Toutefois, lorsqu’une instruction UPDATE est exécutée comme une « mise à jour différée », l’agent de lecture du journal place une paire de Supprimer/Insérer stocké une procédure appelle la base de données de distribution à appliquer aux abonnés, plutôt qu’une mise à jour stockés appel de procédure. Par exemple, supposons que vous avez une table de publication, nommée TABLE1, avec ces trois colonnes :
  • col1 int
  • col2 int
  • col3 varchar(30).
La contrainte unique seulement sur la TABLE1 est définie sur col1 par une contrainte de clé primaire. Supposons que vous disposez d’un seul enregistrement (1,1,'Dallas ').

Lorsque vous exécutez ce code :
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'
L’instruction UPDATE est implémentée par SQL Server en tant que paire de suppression/ mise à jour depuis que vous avez des instructionsINSERT col1, qui possède un index unique défini. Par conséquent, le lecteur de journal place une paire de Supprimer/Insérer des appels dans la base de données de distribution. Cela peut affecter la logique d’activité qui est présent dans les déclencheurs ou les procédures stockées personnalisées sur l’abonné. Vous devez intégrer la logique métier supplémentaire de Supprimer et Insérer des déclencheurs ou des procédures stockées pour gérer cette situation.

Si vous préférez utiliser la logique unique et que vous souhaitez que toutes les commandes de votre mise à jour répliquées comme Supprimer/Insérer des paires, vous pouvez activer un indicateur de suivi, comme décrit dans cet article de la Base de connaissances Microsoft :
160181 INF : indicateur de répliquer la mise à jour sous forme de paires Supprimer/Insérer de suivi
En outre, si vous utilisez un filtre horizontal dans la composition, et si la ligne mise à jour ne remplit pas une condition de filtre, seulement un appel de procédure Supprimer est envoyé aux abonnés. Si la ligne mise à jour ne respectait pas la condition de filtre précédemment mais répond à la condition après la mise à jour, seul l’appel de procédure Insérer est envoyé à travers le processus de réplication.


Dans l’exemple précédent, supposons que vous disposez également d’un filtrage horizontal est défini sur la TABLE1 : où col2 = 'Dallas'. Si vous exécutez ce code :
UPDATE table1 set col2 = 'New York' where col1 = 3
l’agent de lecture du journal place uniquement un appel de procédure Supprimer stockées à appliquer aux abonnés dans la mesure où la ligne mise à jour ne répond pas aux critères de filtre horizontal.

Maintenant, si vous exécutez ce code :
UPDATE table1 set col2 = 'Dallas' where col1 = 3
le lecteur de journal génère uniquement l' Insertion stockées appel de procédure, étant donné que la ligne n’a pas rempli la condition de filtre.

Bien qu’une opération de mise à jour a été effectuée sur l’éditeur, uniquement les commandes appropriées sont appliquées sur l’abonné.

Références


Pour SQL Server 2000 Service Pack 1 ou version ultérieure, consultez l’article suivant dans la Base de connaissances Microsoft :
302341 INF : nouvel indicateur de Trace pour permettre la mise à jour de Singleton pour la réplication transactionnelle