Spécifier un programme de résolution d'articles de fusion
S'applique à : SQL Server
Cette rubrique explique comment spécifier le niveau de suivi et de résolution des conflits pour les articles de fusion dans SQL Server à l'aide de SQL Server Management Studio ou de Transact-SQL.
Recommandations
La réplication de fusion accepte les types de programmes de résolution d'articles suivants :
Programme de résolution par défaut. Le comportement du programme de résolution par défaut varie selon que l'abonnement est un abonnement client ou serveur. Pour plus d’informations sur la spécification du type d’abonnement, consultez Spécifier un type d’abonnement de fusion et une priorité pour la résolution des conflits (SQL Server Management Studio).
Programme de résolution personnalisé que vous avez écrit. Il peut s'agir d'un gestionnaire de logique métier (écrit en code managé) ou d'un programme de résolution COM personnalisé. Pour plus d’informations, consultez Détection et résolution avancées des conflits de réplication de fusion. Si vous devez implémenter une logique personnalisée qui est exécutée pour chaque ligne répliquée, pas seulement pour les lignes en conflit, consultez Implémenter un gestionnaire de logique métier pour un article de fusion.
Un programme de résolution COM-based standard, fourni avec Microsoft SQL Server.
Pour utiliser un programme de résolution autre que le programme de résolution par défaut, vous devez le copier sur l'ordinateur exécutant l'Agent de fusion et l'inscrire (si vous utilisez un gestionnaire de logique métier, il doit être également inscrit sur le serveur de publication). L'Agent de fusion s'exécute sur :
le serveur de distribution pour un abonnement envoyé ;
l'Abonné pour un abonnement extrait ;
Le serveur Microsoft Internet Information Services (IIS) pour un abonnement extrait qui utilise la synchronisation Web
Utilisation de SQL Server Management Studio
Après l’inscription du programme de résolution, spécifiez qu’un article doit l’utiliser sous l’onglet Résolveur de la boîte de dialogue Propriétés de l’article - <Article>, accessible dans New Publication Wizard et dans la boîte de dialogue Propriétés de la publication - <Publication>. Pour plus d’informations sur l’utilisation de l’Assistant et sur l’accès à la boîte de dialogue, consultez Créer une publication et Afficher et modifier les propriétés d’une publication.
Pour spécifier un programme de résolution
Dans la page Articles de l'Assistant Nouvelle publication ou la boîte de dialogue Propriétés de la publication – <Publication>, sélectionnez une table.
Cliquez sur Propriétés de l'articlepuis sur Définir les propriétés de l'article de la table en surbrillance.
Dans la page Propriétés de l’article - <Article>, cliquez sur l’onglet Résolveur.
Sélectionnez Utiliser un résolveur personnalisé (inscrit sur le serveur de distribution)puis, dans la liste, cliquez sur le programme de résolution.
Si le programme de résolution nécessite des entrées (par exemple un nom de colonne), indiquez- les dans la zone de texte Entrez les informations requises par le résolveur .
Cliquez sur OK.
Répétez la procédure pour chaque article exigeant un programme de résolution.
Utilisation de Transact-SQL
Pour inscrire un outil personnalisé de résolution des conflits
Si vous projetez d'inscrire votre propre outil personnalisé de résolution des conflits, créez-en un répondant à l'un des types suivants :
Programme de résolution s'appuyant sur le code managé, comme un gestionnaire de logique métier. Pour plus d’informations, voir Implémenter un gestionnaire de logique métier pour un article de fusion.
Programme de résolution s'appuyant sur des procédures stockées et sur COM. Pour plus d’informations, consultez Implémenter un outil personnalisé de résolution des conflits pour un article de fusion.
Pour déterminer si le programme de résolution souhaité est déjà inscrit, exécutez sp_enumcustomresolvers (Transact-SQL) au niveau du serveur de publication dans toute base de données. Une description du programme de résolution personnalisé est alors affichée, de même que le CLSID de chaque programme de résolution s'appuyant sur l'architecture COM inscrit sur le serveur de distribution ou des informations sur l'assembly managé pour chaque gestionnaire de logique métier inscrit sur le serveur de distribution.
Si le programme de résolution personnalisé souhaité n’est pas encore inscrit, exécutez sp_registercustomresolver (Transact-SQL) au niveau du serveur de distribution. Spécifiez le nom du programme de résolution pour @article_resolver; pour un gestionnaire de logique métier, il s'agit du nom convivial de l'assembly. Pour les programmes de résolution s’appuyant sur l’architecture COM, spécifiez le CLSID de la DLL pour @resolver_clsid et, pour un gestionnaire de logique métier, affectez la valeur true à @is_dotnet_assembly, spécifiez le nom de l’assembly pour @dotnet_assembly_name et le nom complet de la classe qui remplace BusinessLogicModule pour dotnet_class_name.
Remarque
Si un assembly de gestionnaire de logique métier n'est pas déployé dans le même répertoire que l'exécutable de l'Agent de fusion, que l'application qui démarre de façon synchronisée l'Agent de fusion ou dans le GAC (Global Assembly Cache), vous devez spécifier le chemin d'accès complet avec le nom de l'assembly pour @dotnet_assembly_name.
Si le programme de résolution est un programme de résolution s'appuyant sur l'architecture COM :
Copiez la DLL de programme de résolution personnalisé sur le serveur de distribution pour les abonnements par émission de données ou sur l'Abonné pour les abonnements par extraction.
Remarque
Les programmes de résolution personnalisés Microsoft se trouvent dans le répertoire C :\Program Files\Microsoft SQL Server\nnn\COM.
Utilisez regsvr32.exe pour inscrire la DLL du programme de résolution personnalisé auprès du système d'exploitation. Par exemple, l'exécution de la commande suivante à l'invite de commande permet d'enregistrer le résolveur de conflits additifs du Serveur SQL :
regsvr32 ssradd.dll
Si le programme de résolution est un gestionnaire de logique métier, déployez l'assembly dans le même dossier que le fichier exécutable de l'Agent de fusion (replmerg.exe), dans le même dossier qu'une application qui appelle l'Agent de fusion ou dans le dossier spécifié pour le @dotnet_assembly_name à l'étape 3.
Remarque
L’emplacement d’installation par défaut de l’exécutable Agent de fusion est C :\Program Files\Microsoft SQL Server\nnn\COM.
Spécifier un programme de résolution personnalisé lors de la définition d’un article de fusion
Si vous projetez d'utiliser un outil personnalisé de résolution des conflits, créez et inscrivez le programme de résolution à l'aide de la procédure précitée.
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) et notez le nom du programme de résolution personnalisé souhaité dans le champ value du jeu de résultats.
Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle (Transact-SQL). Spécifiez le nom du programme de résolution de l'étape 2 pour @article_resolver et toute entrée requise pour le programme de résolution personnalisé à l'aide du paramètre @resolver_info . Pour les programmes de résolution personnalisés s'appuyant sur des procédures stockées, @resolver_info est le nom de la procédure stockée. Pour plus d’informations sur l’entrée nécessaire aux programmes de résolution fournis par , consultez Microsoft COM-Based Resolvers.
Spécifier ou changer un programme de résolution personnalisé pour un article de fusion existant
Pour déterminer si un programme de résolution personnalisé a été défini pour un article, ou pour obtenir le nom du programme de résolution, exécutez sp_helpmergearticle (Transact-SQL). Si un programme de résolution personnalisé a été défini pour l'article, son nom est affiché dans le champ article_resolver . Toute entrée fournie au programme de résolution est affichée dans le champ resolver_info du jeu de résultats.
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) et notez le nom du programme de résolution personnalisé souhaité dans le champ value du jeu de résultats.
Dans la base de données de publication sur le serveur de publication, exécutez sp_changemergearticle (Transact-SQL). Affectez la valeur article_resolver, y compris le chemin d'accès complet pour les gestionnaires de logique métier, à @property, et le nom du programme de résolution personnalisé souhaité de l'étape 2 à @value.
Pour modifier toute entrée requise pour le programme de résolution personnalisé, réexécutez sp_changemergearticle (Transact-SQL). Affectez la valeur resolver_info à @property et toute entrée requise pour le programme de résolution personnalisé à @value. Pour les programmes de résolution personnalisés s'appuyant sur des procédures stockées, @resolver_info est le nom de la procédure stockée. Pour plus d’informations sur l’entrée nécessaire, consultez Programmes de résolution COM Microsoft.
Annuler l’inscription d’un outil de résolution des conflits personnalisé
Sur le serveur de publication, exécutez sp_enumcustomresolvers (Transact-SQL) et notez le nom du programme de résolution personnalisé à supprimer dans le champ value du jeu de résultats.
Exécutez sp_unregistercustomresolver (Transact-SQL) sur le serveur de distribution. Spécifiez le nom complet du programme de résolution personnalisé de l'étape 1 pour @article_resolver.
Exemples (Transact-SQL)
Cet exemple crée un nouvel article et spécifie que le résolveur de conflits SQL Server Averaging doit être utilisé pour calculer la moyenne de la colonne UnitPrice en cas de conflit.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';
EXEC sp_addmergearticle
@publication = @publication,
@article = @article,
@source_object = @article,
@article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver',
@resolver_info = 'UnitPrice';
GO
Cet exemple modifie un article de manière à spécifier que l'Outil de résolution des conflits d'addition doit être utilisé pour calculer la somme de la colonne UnitsOnOrder en cas de conflit.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property='article_resolver',
@value='Microsoft SQL Server Additive Conflict Resolver';
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property='resolver_info',
@value='UnitsOnOrder';
GO