Partager via


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 s’il existe des conflits. Si des conflits sont détectés, l’Agent de fusion utilise un programme de résolution de conflits (qui est spécifié lorsqu’un article est ajouté à une publication) pour déterminer les données acceptées et propagées vers d’autres sites.

Remarque

Bien qu’un Abonné se synchronise avec le serveur de publication, les conflits se produisent généralement entre les mises à jour effectuées sur différents Abonnés, au lieu d’être mises à jour sur un Abonné et sur le serveur de publication.

Le comportement de la détection et de la résolution des conflits dépend des options suivantes, qui sont décrites dans cette rubrique :

  • Que vous spécifiiez le suivi au niveau des colonnes, le suivi au niveau des lignes ou le suivi au niveau de l’enregistrement logique.

  • Que vous spécifiiez le mécanisme de résolution par défaut basé sur la priorité ou spécifiez un programme de résolution d’article. Un résolveur d'articles peut être :

    • Gestionnaire de logique métier écrit dans du code managé.

    • Programme de résolution personnalisé BASÉ sur COM.

    • Programme de résolution COM fourni par Microsoft.

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

Détection des conflits

Si une modification de données est qualifiée de conflit ou non dépend du type de suivi des conflits que vous définissez pour un article :

  • Si vous sélectionnez le suivi des conflits au niveau des colonnes, il est considéré comme un conflit si des modifications sont apportées à la même colonne dans la même ligne à plusieurs nœuds de réplication.

  • Si vous sélectionnez le suivi au niveau des lignes, il est considéré comme un conflit si des modifications sont apportées à toutes les colonnes de la même ligne à plusieurs nœuds de réplication (les colonnes affectées dans les lignes correspondantes n’ont pas besoin d’être identiques).

  • Si vous sélectionnez le suivi au niveau de l’enregistrement logique, il est considéré comme un conflit si des modifications sont apportées à une ligne du même enregistrement logique au niveau de plusieurs nœuds de réplication (les colonnes affectées dans les lignes correspondantes n’ont pas besoin d’être identiques).

Pour plus d’informations, consultez Détection et résolution des conflits dans les enregistrements logiques.

Pour spécifier le niveau de suivi et de résolution des conflits pour un article, consultez Spécifier le niveau de suivi et de résolution des conflits pour les articles de fusion.

Résolution de conflit

Une fois qu’un conflit est détecté, l’Agent de fusion lance le programme de résolution de conflit sélectionné et utilise le programme de résolution pour déterminer le gagnant du conflit. La ligne gagnante est appliquée au serveur de publication et à l’Abonné, et les données de la ligne perdante sont écrites dans une table des conflits. Les conflits sont résolus immédiatement après l’exécution du programme de résolution, sauf si vous sélectionnez pour résoudre les conflits de manière interactive.

Types de résolveurs

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, vous pouvez avoir différents résolveurs de conflits servant différents articles, ou le même programme de résolution de conflit servant un article, plusieurs articles ou tous les articles comprenant une publication.

Si vous envisagez d’utiliser le programme de résolution de conflit basé sur la priorité par défaut, vous n’avez pas besoin de définir la propriété de programme de résolution d’un article. Si vous souhaitez utiliser un programme de résolution d’article au lieu du programme de résolution par défaut, vous devez définir la propriété du programme de résolution pour l’article qui l’utilisera 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é d’informations du programme de résolution.

La réplication de fusion offre quatre types de résolveurs de conflits :

  • Programme de résolution de conflit basé sur la priorité par défaut

    Le mécanisme de résolution par défaut se comporte différemment, selon qu’un abonnement est un abonnement client ou un abonnement serveur. Vous attribuez des valeurs de priorité à des Abonnés individuels qui utilisent des abonnements serveur ; les modifications apportées au nœud avec la priorité la plus élevée gagnent tous les conflits. Pour les abonnements clients, la première modification écrite dans le serveur de publication gagne le conflit.

    Une fois qu’un abonnement est créé, il ne peut pas être modifié d’un type à un autre.

  • Gestionnaire de logique métier

    L’infrastructure de gestionnaire de logique métier vous permet d’écrire un assembly de code managé appelé pendant le processus de synchronisation de fusion. L’assembly inclut la logique métier qui peut répondre aux conflits et un certain nombre d’autres conditions pendant la synchronisation. Pour plus d’informations, consultez Exécuter la logique métier pendant la synchronisation de fusion.

  • 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 Microsoft Visual C++ ou Microsoft Visual Basic. Pour plus d’informations, consultez COM-Based programmes de résolution personnalisés.

  • Programme de résolution COM fourni par Microsoft

    Microsoft SQL Server inclut un certain nombre de résolveurs BASÉS sur COM. Pour plus d’informations, consultez Microsoft COM-Based Resolvers.

Pour plus d’informations sur la sélection du type de programme de résolution approprié, consultez Choisir un programme de résolution.

Remarque

Certains résolveurs d’articles sont écrits pour gérer les conflits uniquement pour certaines opérations. Par exemple, un programme de résolution peut gérer les mises à jour, mais pas les insertions ou les suppressions. Le programme de résolution de conflits basé sur la priorité par défaut gère les conflits non gérés par le programme de résolution d’article.

Pour spécifier un type d’abonnement de fusion et une priorité de résolution des conflits, consultez

Programme de résolution interactif

La réplication fournit une interface utilisateur Interactive Resolver qui peut être utilisée conjointement avec le programme de résolution de conflit basé sur la priorité par défaut ou un programme de résolution d’articles. Lorsque vous effectuez une synchronisation à la demande via Microsoft Windows Synchronization Manager, le programme de résolution interactif affiche les données de conflit au moment de l’exécution et vous permet de choisir comment résoudre les conflits. Pour plus d’informations sur la façon d’activer la résolution interactive et de lancer le programme de résolution interactif, consultez Résolution interactive des conflits.

Affichage des conflits

Le moyen le plus simple d’afficher les conflits consiste à utiliser la visionneuse des conflits de réplication, disponible à partir de SQL Server Management Studio (SQL Server fournit également des procédures stockées qui permettent aux tables de conflit d’être interrogées.). La visionneuse de conflits et le programme de résolution interactif sont des outils similaires, mais le programme de résolution interactif vous permet de résoudre les conflits au fur et à mesure que la synchronisation se produit, tandis que la visionneuse de conflits est conçue pour afficher les conflits une fois qu’elles ont été résolues. Si les métadonnées de conflit sont toujours disponibles dans les tables système (les métadonnées de conflit sont conservées pendant 14 jours par défaut), vous pouvez remplacer les résultats de résolution des conflits dans la visionneuse de conflits, mais si une intervention directe est régulièrement requise, envisagez d’utiliser le programme de résolution interactif.

Remarque

Les conflits impliquant des enregistrements logiques ne sont pas affichés dans La visionneuse de conflits. Pour afficher des informations sur ces conflits, utilisez des procédures stockées de réplication. Pour plus d’informations, consultez Afficher les informations de conflit pour les publications de fusion (réplication Transact-SQL programmation).

La visionneuse de conflits affiche des informations provenant de trois tables système :

  • La réplication crée une table de conflit pour chaque table d’un article de fusion, avec un nom au format MSmerge_conflict_<PublicationName>_<ArticleName>.

    Les tables de conflit ont 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 de conflit (la version gagnante de la ligne se trouve dans la table utilisateur réelle).

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

  • La table sysmergearticles identifie les tables utilisateur qui ont des tables en conflit et fournit des informations sur les tables de conflit.

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

  • Au niveau du Publisher et du Subscriber, si le niveau de compatibilité de la publication est 90RTM ou supérieur.

  • Au niveau de l'application Publisher, si le niveau de compatibilité de la publication est inférieur à 80RTM.

  • Sur le serveur de publication si les abonnés utilisent SQL Server Compact. Les données en conflit ne peuvent pas être stockées sur les abonnés SQL Server Compact.

Pour afficher les conflits

Voir aussi

Synchroniser les données