Implémenter un outil personnalisé de résolution des conflits pour un article de fusion
Cette rubrique explique comment implémenter un programme de résolution de conflit personnalisé pour un article de fusion dans SQL Server 2014 à l’aide de Transact-SQL ou d’un programme de résolution personnalisé COM.
Dans cette rubrique
Pour implémenter l'outil personnalisé de résolution des conflits pour un article de fusion à l'aide de :
Utilisation de Transact-SQL
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 résolveurs de procédures stockées Microsoft SQL Server sont appelés uniquement pour gérer les conflits basés sur les modifications 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 de résolution des conflits personnalisé avec un nouvel article de table
- Exécutez sp_addmergearticle pour définir un article, en spécifiant une valeur du programme de résolution de procédure stockée MicrosoftSQL Server pour le paramètre @article_resolver et le nom de la procédure stockée qui implémente la logique de résolution de conflit pour le paramètre @resolver_info. Pour plus d’informations, consultez définir un Article.
Pour utiliser un outil de résolution des conflits personnalisé avec un article de table existant
Exécutez sp_changemergearticle en spécifiant @publication, @article, en affectant la valeur article_resolver à @property et en affectant la valeur MicrosoftSQL Server Stored ProcedureResolver à @value.
Exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur resolver_info à @propertyet 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.
Programme de résolution personnalisé basé sur COM
L'espace de noms Microsoft.SqlServer.Replication.BusinessLogicSupport implémente une interface qui vous permet d'écrire une logique métier complexe afin de gérer les événements et de résoudre les conflits qui se produisent au cours du processus de synchronisation de la réplication de fusion. Pour plus d’informations, voir Implémenter un gestionnaire de logique métier pour un article de fusion. Vous pouvez également écrire votre propre logique métier personnalisée en code natif pour résoudre ces conflits. Cette logique est générée en tant que composant COM et compilée dans des bibliothèques de liens dynamiques (DLL), à l’aide de produits tels que Microsoft Visual C++. Un outil de résolution des conflits personnalisé basé sur COM doit implémenter l’interface ICustomResolver, qui est conçue spécifiquement pour la résolution des conflits.
Pour créer et enregistrer un outil de résolution des conflits personnalisé basé sur COM
Dans un environnement de création compatible COM, ajoutez des références à la bibliothèque de l'outil de résolution des conflits personnalisé.
Pour un projet Visual C++, utilisez la directive #import pour importer cette bibliothèque dans votre projet.
Créez une classe qui implémente l'interface ICustomResolver .
Implémentez certaines méthodes et propriétés.
Générez le projet de manière à créer le fichier bibliothèque de l'outil de résolution des conflits personnalisé.
Déployez la bibliothèque dans le répertoire contenant l'exécutable de l'agent de fusion (généralement \Microsoft SQL Server\100\COM).
Remarque
Un outil de résolution des conflits personnalisé doit être déployé sur l'Abonné pour un abonnement par extraction, sur le serveur de distribution pour un abonnement par émission de données ou sur le serveur Web utilisé avec la synchronisation Web.
Enregistrez la bibliothèque de l'outil de résolution des conflits personnalisé à l'aide de regsvr32.exe à partir du répertoire de déploiement, comme suit :
regsvr32.exe mycustomresolver.dll
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) pour vérifier que la bibliothèque n’est pas déjà inscrite en tant que programme de résolution de conflit personnalisé.
Pour inscrire la bibliothèque en tant que programme de résolution de conflit personnalisé, exécutez sp_registercustomresolver (Transact-SQL) sur le serveur de distribution. Spécifiez le nom convivial de l’objet COM pour @article_resolver, l’ID de la bibliothèque (CLSID) pour @resolver_clsid et la valeur de
false
@is_dotnet_assembly.Remarque
Lorsqu’il n’est plus nécessaire, un programme de résolution de conflit personnalisé peut être désinscrit à l’aide de sp_unregistercustomresolver (Transact-SQL).
(Facultatif) Sur un cluster, répétez les étapes 5 à 8 pour enregistrer le programme de résolution personnalisé sur tous les nœuds du cluster. Cette procédure est nécessaire pour garantir que le programme de résolution personnalisé sera en mesure de charger correctement le réconciliateur suite à un basculement.
Pour utiliser un outil de résolution des conflits personnalisé avec un nouvel article de table
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) et notez le nom convivial du programme de résolution souhaité.
Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle (Transact-SQL) pour définir un article. Spécifiez le nom convivial du programme de résolution d'articles obtenu à l'étape 1 pour @article_resolver. Pour plus d’informations, consultez définir un Article.
Pour utiliser un outil de résolution des conflits personnalisé avec un article de table existant
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) et notez le nom convivial du programme de résolution souhaité.
Exécutez sp_changemergearticle (Transact-SQL) en spécifiant@publication, @article, en affectant une valeur article_resolver à @property et en affectant le nom convivial du programme de résolution d’articles obtenu à l’étape 1 à @value.
Affichage d'un exemple de programme de résolution personnalisé
Un exemple est disponible dans les fichiers d'exemple de SQL Server 2000. Téléchargez le sql2000samples.zip. Cela télécharge 3 fichiers de 6,9 Mo.
Extrayez les fichiers du fichier .cab compressé téléchargé.
Exécutez setup.exe.
Remarque
Lorsque vous choisissez les options d'installation, il est uniquement nécessaire d'installer les exemples de Réplication . (Le chemin d’installation par défaut est C :\Program Files (x86)\Microsoft SQL Server 2000 Samples\1033\)
Accédez au dossier d'installation. (Le dossier par défaut est le suivant : C:\Program Files (x86)\Microsoft SQL Server 2000 Samples\1033\sqlrepl\unzip_sqlreplSP3.exe)
Exécutez le programme unzip_sqlreplSP3.exe .
Remarque
L’exemple de programme de résolution COM s’installe (par défaut) dans le dossier suivant : C:\Program Files (x86)\Microsoft SQL Server 2000 Samples\1033\sqlrepl\resolver\subspres .
Dans le dossier subspres , recherchez toutes les occurrences de l’élément #include sqlres.h dans l’ensemble des fichiers sources, et remplacez-les par #import "replrec.dll" no_namespace, raw_interfaces_only.
Voir aussi
Détection et résolution des conflits de réplication de fusion avancée
Résolveurs personnalisés COM
Bonnes pratiques en matière de sécurité de la réplication