Détection et résolution avancées des conflits de réplication de fusion

Lorsqu'un serveur de publication et un Abonné sont connectés et que la synchronisation se produit, l'Agent de fusion détecte la présence d'éventuels conflits. Si tel est le cas, l'Agent de fusion utilise un programme de résolution de conflits (spécifié lorsqu'un article est ajouté à une publication) pour déterminer les données qui doivent être acceptées et propagées aux autres sites. Pour obtenir une liste complète des types de conflits, consultez la section « Types de conflits » dans Comment la réplication de fusion détecte et résout les conflits.

[!REMARQUE]

Bien qu'un Abonné se synchronise avec le serveur de publication, des conflits surviennent généralement entre les mises à jour effectuées par différents Abonnés plutôt qu'entre les mises à jour effectuées par l'Abonné et le serveur de publication.

Le comportement de la détection et de la résolution des conflits est lié aux options suivantes, décrites dans cette rubrique :

  • que vous définissiez le suivi au niveau des colonnes, au niveau des lignes ou au niveau des enregistrements logiques,

  • que vous définissiez le mécanisme de résolution par défaut basé sur les priorités ou un programme de résolution d'articles, un programme de résolution d'articles peut être :

    • Un gestionnaire de logique métier écrit en code managé

    • Un programme de résolution personnalisé basé sur COM

    • Un programme de résolution basé sur COM fourni par Microsoft

    Si le mécanisme de résolution par défaut est utilisé, le comportement est également déterminé par le type d'abonnement utilisé : client ou serveur.

Détection de conflit

Qu'une modification de données soit considérée comme un conflit dépend du type de suivi des conflits défini pour un article :

  • si vous sélectionnez le suivi des conflits au niveau des colonnes, il y a conflit si des modifications sont apportées à la même colonne d'une même ligne sur plusieurs nœuds de réplication ;

  • si vous sélectionnez le suivi au niveau des lignes, il y a conflit si des modifications sont apportées à des colonnes quelconques d'une même ligne sur plusieurs nœuds de réplication (les colonnes affectées dans les lignes correspondantes ne doivent pas être identiques) ;

  • si vous sélectionnez le suivi au niveau des enregistrements logiques, il y a conflit si des modifications sont apportées à des lignes quelconques d'un même enregistrement logique sur plusieurs nœuds de réplication (les colonnes affectées dans les lignes correspondantes ne doivent pas être identiques).

Pour plus d'informations sur le niveau de suivi, consultez la section « Niveau de suivi » des rubriques Comment la réplication de fusion détecte et résout les conflits et Détection et résolution des conflits dans les enregistrements logiques.

Pour spécifier le niveau de suivi et de résolution des conflits d'un article

Résolution de conflits

Après la détection d'un conflit, l'Agent de fusion lance le programme de résolution de conflits sélectionné afin pour déterminer le « vainqueur du conflit ». La ligne gagnante est appliquée au serveur de publication et à l'Abonné tandis que les données de la ligne perdante sont consignées dans une table de conflits. Les conflits sont résolus immédiatement après l'exécution du programme de résolution, à moins que vous ne choisissiez de les résoudre interactivement.

Types de programmes de résolution

Dans la réplication de fusion, la résolution des conflits a lieu au niveau de l'article. Pour les publications composées de plusieurs articles, différents programmes de résolution de conflits peuvent gérer différents articles, sinon un même programme de résolution de conflits peut gérer un article, plusieurs articles, ou tous les articles d'une publication.

Si vous envisagez d'utiliser le programme de résolution de conflits par défaut sur la base de priorités, vous n'êtes pas obligé de définir la propriété du programme de résolution d'un article. Si vous souhaitez utiliser un programme de résolution d'articles à la place du programme de résolution par défaut, vous devez définir la propriété du programme de résolution pour l'article qui va l'utiliser (en sélectionnant un programme de résolution disponible sur le serveur de publication). Toutes les informations spécifiques qui doivent être transmises au programme de résolution peuvent également être spécifiées dans la propriété du programme de résolution.

La réplication de fusion propose quatre types de programmes de résolution de conflits :

  • Le programme de résolution des conflits par défaut basé sur les priorités

    Le mécanisme de résolution par défaut se comporte différemment selon qu'un abonnement est de type client ou serveur. Vous attribuez des valeurs de priorités à des Abonnés individuels qui utilisent des abonnements serveur ; les modifications apportées au nœud ayant la priorité la plus élevée gagnent les conflits. Pour les abonnements client, c'est la première modification écrite sur le serveur de publication qui gagne le conflit. Pour plus d'informations sur les types d'abonnement, consultez la section « Types d'abonnement » de la rubrique Comment la réplication de fusion détecte et résout les conflits.

    Il n'est plus possible de modifier le type d'un abonnement une fois celui-ci créé.

  • Un Gestionnaire de logique métier

    La structure du gestionnaire de logique métier permet d'écrire un assembly de code managé qui est appelé pendant le processus de synchronisation de fusion. Cet assembly inclut une logique de gestion capable de répondre aux conflits et à un certain nombre d'autres conditions pendant la synchronisation. Pour plus d'informations, consultez Exécution de la logique métier lors de la synchronisation de fusion.

  • Un programme de résolution personnalisé basé sur COM

    La réplication de fusion fournit une API permettant d'écrire des programmes de résolution en tant qu'objets COM dans des langages tels que MicrosoftVisual C++ ou MicrosoftVisual Basic. Pour plus d'informations, consultez Programmes de résolution personnalisés COM.

  • Un programme de résolution personnalisé basé sur COM fourni par Microsoft

    MicrosoftSQL Server inclut plusieurs programmes de résolution basés sur COM. Pour plus d'informations, consultez Programmes de résolution COM Microsoft.

Pour plus d'informations sur le choix du type de programme de résolution approprié, consultez Choix d'un résolveur.

[!REMARQUE]

Certains programmes de résolution d'articles sont écrits pour gérer les conflits de certaines opérations bien précises. Un programme de résolution peut ainsi traiter les mises à jour, mais pas les insertions ni les suppressions. Le programme de résolution de conflits par défaut basé sur les priorités traite tous les conflits non traités par le programme de résolution d'articles.

Pour spécifier un type d'abonnement de fusion et une priorité pour la résolution des conflits

Programme de résolution interactif

La réplication fournit une interface utilisateur du programme de résolution interactif, exploitable en association avec le programme de résolution de conflits par défaut basé sur les priorités ou avec un programme de résolution d'articles. Lors d'une synchronisation à la demande via le Gestionnaire de synchronisation Microsoft Windows, le programme de résolution interactif affiche les données conflictuelles durant l'exécution et vous permet de choisir le moyen de résoudre les conflits. Pour plus d'informations sur la manière d'activer la résolution interactive et de démarrer le programme de résolution interactif, consultez Résolution interactive des conflits.

Affichage des conflits

Le moyen le plus direct d'afficher les conflits consiste à utiliser l'Outil de résolution des conflits de réplication, disponible à partir de SQL Server Management Studio (SQL Server fournit également les procédures stockées qui permettent l'interrogation des tables conflictuelles). L'Outil de résolution des conflits et le programme de résolution interactif sont des outils similaires, mais le second permet de résoudre des conflits au moment de la synchronisation tandis que le premier affiche les conflits après leur résolution. Si les métadonnées en conflit sont toujours disponibles dans les tables système (les métadonnées en conflit sont conservées par défaut pendant 14 jours), vous pouvez supplanter les résultats de la résolution des conflits dans l'Outil de résolution des conflits ; si, en revanche, une intervention directe est régulièrement demandée, pensez à utiliser le Programme de résolution interactif.

[!REMARQUE]

Les conflits qui impliquent des enregistrements logiques ne s'affichent pas dans l'outil de résolution des conflits. Pour afficher des informations sur ces conflits, utilisez les procédures stockées de réplication. Pour plus d'informations, consultez Procédure : afficher les informations relatives aux conflits pour les publications de fusion (programmation Transact-SQL de la réplication).

L'Outil de résolution des conflits affiche des informations issues de trois tables système :

  • La réplication crée une table de conflits pour chaque table d'un article de fusion, dont le nom se présente sous la forme MSmerge_conflict_<PublicationName>_<ArticleName>.

    Les tables de conflits possèdent la même structure que les tables sur lesquelles elles sont basées. Une ligne de l'une de ces tables se compose de la version perdante d'une ligne conflictuelle (la version gagnante de la ligne réside dans la table utilisateur réelle).

  • La table MSmerge_conflicts_info fournit des informations sur chaque conflit, notamment le type de conflit.

  • La table sysmergearticles identifie les tables utilisateur comportant des tables de conflits, puis fournit des informations sur ces tables de conflits.

Par défaut, les informations de conflit sont stockées :

  • sur le serveur de publication et sur l'Abonné si le niveau de compatibilité de la publication est 90RTM ou supérieur. Pour plus d'informations sur le niveau de compatibilité, consultez la section « Niveau de compatibilité des publications de fusion » dans la rubrique Utilisation de plusieurs versions de SQL Server dans une topologie de réplication. ;

  • sur le serveur de publication si le niveau de compatibilité de la publication est inférieur à 90RTM ;

  • Sur le serveur de publication si les Abonnées exécutent SQL Server Compact 3.5 SP1. Les données conflictuelles ne peuvent pas être stockées sur les Abonnés SQL Server Compact 3.5 SP1.

Pour afficher les conflits

Voir aussi

Concepts