Procédure : implémenter un outil personnalisé de résolution des conflits s'appuyant sur des procédures stockées pour un article de fusion (programmation Transact-SQL de la réplication)
Vous pouvez écrire votre propre outil personnalisé de résolution des conflits sous forme de procédure stockée Transact-SQL au niveau de chaque serveur de publication. Au cours de la synchronisation, cette procédure stockée est appelée en cas de conflits dans un article pour lequel ce programme de résolution a été enregistré, et les informations sur la ligne en conflit sont passées par l'Agent de fusion aux paramètres requis de la procédure. Les outils personnalisés de résolution des conflits s'appuyant sur des procédures stockées sont toujours créés au niveau du serveur de publication.
[!REMARQUE]
Les programmes de résolution s'appuyant sur des procédures stockées MicrosoftSQL Server sont appelés uniquement pour gérer les conflits de changement de ligne. Ils ne peuvent pas être utilisés pour gérer d'autres types de conflits, comme les échecs d'insertion en raison de violations de clés primaires ou de violations de contraintes d'index unique.
Pour créer un outil personnalisé de résolution des conflits s'appuyant sur des procédures stockées
Dans la base de données de publication ou la base de données msdb sur le serveur de publication, créez une procédure stockée système qui implémente les paramètres requis suivants :
Paramètre
Type de données
Description
@tableowner
sysname
Nom du propriétaire de la table pour laquelle un conflit est résolu. Il s'agit du propriétaire de la table dans la base de données de publication.
@tablename
sysname
Nom de la table pour laquelle un conflit est résolu.
@rowguid
uniqueidentifier
Identificateur unique de la ligne en conflit.
@subscriber
sysname
Nom du serveur depuis lequel une modification en conflit est propagée.
@subscriber_db
sysname
Nom de la base de données depuis laquelle la modification en conflit est propagée.
@log_conflict OUTPUT
int
Indique si le processus de fusion doit enregistrer un conflit en vue de le résoudre ultérieurement :
0 = ne pas enregistrer le conflit.
1 = l'Abonné est le perdant du conflit.
2 = le serveur de publication est le perdant du conflit.
@conflict_message OUTPUT
nvarchar(512)
Message accompagnant la résolution si le conflit est enregistré.
@destowner
sysname
Propriétaire de la table publiée créée sur l'Abonné.
Cette procédure stockée utilise les valeurs passées par l'Agent de fusion à ces paramètres pour implémenter votre logique de résolution des conflits personnalisée. Elle doit retourner un jeu de résultats d'une seule ligne dont la structure est identique à la table de base et qui contient les valeurs de données pour la version gagnante de la ligne.
Accordez les autorisations EXECUTE sur la procédure stockée à toutes connexions utilisées par les Abonnés pour se connecter au serveur de publication.
Pour utiliser un outil personnalisé de résolution des conflits avec un nouvel article de table
- Exécutez sp_addmergearticle pour définir un article, en affectant la valeur MicrosoftSQL Server Stored Procedure Resolver au paramètre @article_resolver et le nom de la procédure stockée qui implémente la logique de l'outil de résolution des conflits au paramètre @resolver_info. Pour plus d'informations, consultez Procédure : définir un article (programmation Transact-SQL de la réplication).
Pour utiliser un outil personnalisé de résolution des conflits avec un article de table existant
Exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur article_resolver à @property et la valeur MicrosoftSQL Server Stored ProcedureResolver à @value.
Exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur resolver_info à @property et en spécifiant le nom de la procédure stockée qui implémente la logique de l'outil de résolution des conflits pour @value.