Résolution de conflit pour la réplication de fusion

S'applique à : SQL Server

Les conflits de réplication de fusion sont résolus en fonction de l'outil de résolution spécifié pour chaque article. Par défaut, les conflits sont résolus sans que l'utilisateur doive intervenir. Mais il est possible de les afficher et de modifier le résultat de la résolution dans la Visionneuse des conflits de réplication de Microsoft.

Les données de conflit sont disponibles dans la Visionneuse des conflits de réplication pendant la durée définie comme période de rétention des conflits (par défaut 14 jours). Pour définir la période de rétention des conflits :

Par défaut, les informations sur les conflits sont stockées dans les emplacements suivants :

  • Sur le serveur de publication et sur l'Abonné, si le niveau de compatibilité est égal ou supérieur à 90RTM.
  • Sur le serveur de publication, si le niveau de compatibilité est inférieur à 80RTM.
  • Sur le serveur de publication si les Abonnées exécutent SQL Server Compact. Les données conflictuelles ne peuvent pas être stockées sur les abonnés SQL Server Compact.

Le stockage des informations de conflits est contrôlé par la propriété de publication conflict_logging . Pour plus d’informations, consultez sp_addmergepublication (Transact-SQL) et sp_changemergepublication (Transact-SQL).

Il est également possible de résoudre les conflits de façon interactive au cours de la synchronisation à l’aide du programme de résolution interactif Microsoft. L’outil de résolution interactif est disponible par le biais du Gestionnaire de synchronisation Microsoft Windows. Pour plus d'informations, consultez Synchroniser un abonnement à l'aide du Centre de synchronisation Windows (Windows Synchronization Manager).

Résoudre les conflits

  1. Connectez-vous au serveur de publication (ou à l’abonné le cas échéant) dans Microsoft SQL Server Management Studio, puis développez le nœud du serveur.

  2. Développez le dossier Réplication , puis développez le dossier Publications locales .

  3. Cliquez avec le bouton droit sur la publication dont vous souhaitez afficher les conflits puis cliquez sur Afficher les conflits.

    Remarque

    Si vous spécifiez une valeur 'subscriber' pour la propriété conflict_logging , l'option de menu Afficher les conflits n'est pas disponible. Pour afficher les conflits, démarrez ConflictViewer.exe à partir de l'invite de commandes. Par défaut, ConflictViewer.exe se trouve dans le répertoire suivant : Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Pour obtenir la liste des paramètres de démarrage valides, exécutez ConflictViewer.exe -?.

  4. Dans la boîte de dialogue Sélectionner la table de conflits , sélectionnez une base de données et une table dont il faut afficher les conflits.

  5. Dans la Visionneuse des conflits de réplication, vous pouvez effectuer les actions suivantes :

    • Filtrer des lignes avec les boutons situés à droite de la grille supérieure.

    • Sélectionner une ligne dans la grille supérieure pour afficher des informations sur cette ligne dans la grille inférieure.

    • Sélectionner une ou plusieurs lignes dans la grille supérieure puis cliquer sur Supprimer, ce qui équivaut à cliquer sur le bouton Soumettre le gagnant (sans modifier les données).

    • Cliquer sur le bouton des propriétés (...) pour afficher des informations plus détaillées sur une colonne concernée par un conflit.

    • Modifier des données dans la colonne Gagnant du conflit ou Perdant du conflit avant de soumettre les données (les données sont en lecture seule si la colonne est grisée).

    • Cliquer sur Soumettre le gagnant pour accepter la ligne désignée comme gagnante du conflit.

    • Cliquer sur Soumettre le perdant pour substituer la résolution et propager la valeur désignée comme perdante du conflit à tous les nœuds de la topologie.

    • Sélectionner l'option Consigner les détails de ce conflit pour enregistrer les données de conflit dans un journal. Pour spécifier l'emplacement du fichier, pointez sur le menu Affichage puis cliquez sur Options. Entrez une valeur ou cliquez sur le bouton Parcourir (...) pour accéder au fichier approprié. Cliquez sur OK pour fermer la boîte de dialogue Options .

  6. Fermer la Visionneuse des conflits de réplication.

Afficher les informations de conflit

Lorsqu'un conflit est résolu dans une réplication de fusion, les données de la ligne perdante sont écrites dans une table de conflits. Ces données peuvent être affichées par programme en utilisant des procédures stockées de réplication. Pour plus d’informations, consultez Détection et résolution avancées des conflits de réplication de fusion.

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_helpmergepublication. Notez les valeurs des colonnes suivantes dans le jeu de résultats :

    • centralized_conflicts - 1 indique que les lignes présentant des conflits sont stockées sur le serveur de publication, et 0 indique que les lignes présentant des conflits ne sont pas stockées sur le serveur de publication.

    • decentralized_conflicts - 1 indique que les lignes présentant des conflits sont stockées sur l'Abonné, et 0 indique que les lignes présentant des conflits ne sont pas stockées sur l'Abonné.

      Remarque

      Le comportement de journalisation des conflits d’une publication de fusion est défini à l’aide du paramètre @conflict_logging de sp_addmergepublication. L’utilisation du paramètre @centralized_conflicts est dépréciée.

    Le tableau suivant décrit les valeurs de ces colonnes en fonction de la valeur spécifiée pour @conflict_logging.

    Valeur de @conflict_logging centralized_conflicts decentralized_conflicts
    publisher 1 0
    subscriber 0 1
    les deux 1 1
  2. Dans la base de données de publication sur le serveur de publication ou dans la base de données d'abonnement de l'Abonné, exécutez sp_helpmergearticleconflicts. Affectez une valeur à @publication afin de retourner uniquement des informations sur les conflits pour les articles qui appartiennent à une publication spécifique. Des informations sur les tables de conflits sont alors retournées pour les articles présentant des conflits. Notez la valeur de conflict_table pour tout article qui vous intéresse. Si la valeur de conflict_table d'un article est NULL, seuls des conflits de suppression se sont produits dans cet article.

  3. (Facultatif) Examinez les lignes présentant des conflits pour les articles qui vous intéressent. Selon la valeur de centralized_conflicts et decentralized_conflicts obtenues à l'étape 1, effectuez l'une des opérations suivantes :

    • Dans la base de données de publication sur le serveur de publication, exécutez sp_helpmergeconflictrows. Spécifiez une table de conflits pour l’article (obtenue à l’étape 1) pour @conflict_table. (Facultatif) Spécifiez une valeur pour @publication afin de retourner uniquement les informations sur les conflits qui concernent une publication spécifique. Des données de ligne et autres informations sur la ligne perdante sont alors retournées.

    • Dans la base de données d'abonnement de l'Abonné, exécutez sp_helpmergeconflictrows. Spécifiez une table de conflits pour l’article (obtenue à l’étape 1) pour @conflict_table. Des données de ligne et autres informations sur la ligne perdante sont alors retournées.

Conflit où la suppression a échoué

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_helpmergepublication. Notez les valeurs des colonnes suivantes dans le jeu de résultats :

    • centralized_conflicts - 1 indique que les lignes présentant des conflits sont stockées sur le serveur de publication, et 0 indique que les lignes présentant des conflits ne sont pas stockées sur le serveur de publication.

    • decentralized_conflicts - 1 indique que les lignes présentant des conflits sont stockées sur l'Abonné, et 0 indique que les lignes présentant des conflits ne sont pas stockées sur l'Abonné.

      Remarque

      Le comportement de journalisation des conflits d’une publication de fusion est défini à l’aide du paramètre @conflict_logging de sp_addmergepublication. L’utilisation du paramètre @centralized_conflicts est dépréciée.

  2. Dans la base de données de publication sur le serveur de publication ou dans la base de données d'abonnement de l'Abonné, exécutez sp_helpmergearticleconflicts. Spécifiez une valeur pour @publication afin de retourner uniquement des informations sur les tables de conflits pour les articles qui appartiennent à une publication spécifique. Des informations sur les tables de conflits sont alors retournées pour les articles présentant des conflits. Notez la valeur de source_object pour tout article qui vous intéresse. Si la valeur de conflict_table d'un article est NULL, seuls des conflits de suppression se sont produits dans cet article.

  3. (Facultatif) Examinez les informations sur les conflits pour les conflits de suppression. Selon la valeur de centralized_conflicts et decentralized_conflicts obtenues à l'étape 1, effectuez l'une des opérations suivantes :

    • Dans la base de données de publication sur le serveur de publication, exécutez sp_helpmergedeleteconflictrows. Spécifiez le nom de la table source (obtenue à l’étape 1) sur laquelle le conflit s’est produit pour @source_object. (Facultatif) Spécifiez une valeur pour @publication afin de retourner uniquement les informations sur les conflits qui concernent une publication spécifique. Les informations sur les conflits de suppression stockées sur le serveur de publication sont alors retournées.

    • Dans la base de données d'abonnement de l'Abonné, exécutez sp_helpmergedeleteconflictrows. Spécifiez le nom de la table source (obtenue à l’étape 1) sur laquelle le conflit s’est produit pour @source_object. (Facultatif) Spécifiez une valeur pour @publication afin de retourner uniquement les informations sur les conflits qui concernent une publication spécifique. Les informations sur les conflits de suppression stockées sur l'Abonné sont alors retournées.