Spécifier les propriétés de la réplication de fusion

S'applique à : SQL Server

Cette rubrique explique comment spécifier différentes propriétés pour votre réplication de fusion.

Article sur la fusion en téléchargement uniquement

Les articles en téléchargement uniquement sont conçus pour les applications dont les données ne sont pas mises à jour au niveau des Abonnés. Pour plus d’informations, consultez Optimiser les performances de la réplication de fusion avec les articles en téléchargement seul.

À propos de l’installation

  • Si vous spécifiez qu'un article est en téléchargement seul après l'initialisation des abonnements, tous les abonnements client qui ont reçu l'aticle doivent être réinitialisés. Les abonnements serveur n'ont pas besoin d'être réinitialisés. Pour plus d’informations sur les effets des modifications de propriétés, consultez Changer des propriétés de publication et d’article.

Utiliser SQL Server Management Studio

Dans la page Articles

Dans la page Articles de l'Assistant Nouvelle publication, sélectionnez une table, puis activez la case à cocher La table sélectionnée est en téléchargement seul.

Sous l’onglet Propriétés de Propriétés de l’article

  1. 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 et cliquez sur Propriétés de l'article.

  2. Cliquez sur Définir les propriétés de l'article de la table en surbrillance ou Définir les propriétés de tous les articles de la table.

  3. Dans la section Objet de destination de l'onglet Propriétés de la boîte de dialogue Propriétés de l'article – <Article>, spécifiez l'une des valeurs suivantes pour Direction de la synchronisation :

    • Téléchargement seul pour l'Abonné, interdire les modifications de l'Abonné
    • Téléchargement seul pour l'Abonné, autoriser les modifications de l'Abonné
  4. Si vous êtes dans la boîte de dialogue Propriétés de la publication – <Publication>, cliquez sur OK pour enregistrer et fermer la boîte de dialogue.

Utiliser Transact-SQL

Nouvel article

  1. Exécutez sp_addmergearticle, en affectant la valeur 1 ou de 2 au paramètre @subscriber_upload_options. Ces chiffres correspondent aux comportements suivants :

    • 0 - aucune restriction (valeur par défaut). Les modifications sur l'abonné sont téléchargées par le serveur de publication.
    • 1 - modifications autorisées au niveau de l'Abonné, mais elles ne sont pas téléchargées sur le serveur de publication.
    • 2 - modifications interdites au niveau de l'Abonné.

    Remarque

    Si la table source d’un article est déjà publiée dans une autre publication, la valeur de @subscriber_upload_options doit être la même pour les deux articles.

Article existant

  1. Pour déterminer si un article est en téléchargement uniquement, exécutez sp_helpmergearticle et vérifiez la valeur de upload_options pour l’article dans le jeu de résultats.

  2. Si la valeur retournée à l’étape 1 est 0, exécutez sp_changemergearticle, en affectant la valeur subscriber_upload_options à @property, la valeur 1 à @force_invalidate_snapshot et @force_reinit_subscription, et la valeur 1 ou 2 à @value, qui correspondent aux comportements suivants :

    • 1 - modifications autorisées au niveau de l'Abonné, mais elles ne sont pas téléchargées sur le serveur de publication.

    • 2 - modifications interdites au niveau de l'Abonné.

      Remarque

      Si la table source d'un article est déjà publiée dans une autre publication, les deux articles doivent être en téléchargement uniquement ou ne pas l'être.

Interactive Conflict Resolution

La réplication Microsoft SQL Server propose un outil de résolution interactif qui vous permet de résoudre manuellement des conflits au cours d’une synchronisation à la demande dans le Gestionnaire de synchronisation Microsoft Windows. Quand la résolution de conflits est activée, résolvez les conflits de façon interactive au cours de la synchronisation, à l'aide du résolveur interactif. 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).

Recommandations

  • Si une synchronisation est effectuée en dehors du Gestionnaire de synchronisation Windows (comme une synchronisation planifiée ou à la demande dans SQL Server Management Studio ou le moniteur de réplication), les conflits sont résolus automatiquement sans intervention de l'utilisateur, en utilisant l'outil de résolution des conflits par défaut spécifié pour l'article. Pour plus d’informations, consultez Interactive Conflict Resolution.

Utiliser SQL Server Management Studio

Activer la résolution de conflits interactive pour un article

  1. 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. 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.
  2. Cliquez sur Propriétés de l'article, puis cliquez sur Définir les propriétés de l'article de Table en surbrillance ou sur Définir les propriétés de tous les articles de table.
  3. Dans la page Propriétés de l'article – <Article> ou Propriétés de l'article – <Type de l'article>, cliquez sur l'onglet Résolveur.
  4. Sélectionnez Autoriser l'abonné à résoudre les conflits de manière interactive au cours de la synchronisation à la demande.
  5. Cliquez sur OK.
  6. Si vous êtes dans la boîte de dialogue Propriétés de la publication – <Publication>, cliquez sur OK pour enregistrer et fermer la boîte de dialogue.

Spécifier qu’un abonnement doit utiliser la résolution de conflits interactive

  1. Dans la boîte de dialogue Propriétés de l'abonnement – <Abonné> : <Base_de_données_abonnement>, affectez la valeur True à l'option Résoudre les conflits de manière interactive. Pour plus d'informations sur l'accès à cette boîte de dialogue, consultez View and Modify Push Subscription Properties et View and Modify Pull Subscription Properties.
  2. Cliquez sur OK.

Utiliser Transact-SQL

Vous pouvez spécifier par programme qu'un Abonné utilisera cette interface graphique pour résoudre les conflits dans les articles lorsqu'un abonnement par extraction à une publication de fusion est créé. Seuls les conflits dans les articles qui prennent en charge cette option seront affichés dans le programme de résolution interactif.

Créer un abonnement de fusion par extraction qui utilise l’outil de résolution interactif

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_helpmergearticle, en spécifiant @publication. Notez la valeur de allow_interactive_resolver pour chaque article du jeu de résultats pour lequel le programme de résolution interactif sera utilisé.
    • Si cette valeur est 1, le programme de résolution interactif sera utilisé.
    • Si cette valeur est 0, vous devez tout d'abord activer le programme de résolution interactif pour chaque article. Pour cela, exécutez sp_changemergearticle, en spécifiant @publication, @article, en affectant la valeur allow_interactive_resolver à @property et la valeur true à @value.
  2. Dans la base de données d'abonnement de l'Abonné, exécutez sp_addmergepullsubscription. Pour plus d’informations, consultez Créer un abonnement par extraction de données (pull).
  3. Dans la base de données d'abonnement de l'Abonné, exécutez sp_addmergepullsubscription_agent, en spécifiant les paramètres suivants :
    • @publisher, @publisher_db (la base de données publiée) et @publication.
    • La valeur true pour @enabled_for_syncmgr.
    • La valeur true pour @use_interactive_resolver.
    • Les informations de compte de sécurité requises par l'Agent de fusion. Pour plus d’informations, consultez Créer un abonnement par extraction de données (pull).
  4. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergesubscription.

Définir un article qui prend en charge l’outil de résolution interactif

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle. Spécifiez le nom de la publication à laquelle l’article appartient pour @publication, le nom de l’article pour @article, l’objet de base de données qui est publié pour @source_object et la valeur true pour @allow_interactive_resolver. Pour plus d’informations, consultez définir un Article.

Niveau de suivi et de résolution des conflits pour les articles de fusion

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.

Lorsqu'un abonnement à une publication de fusion est synchronisé, la réplication vérifie la présence de conflits faisant suite à de la modification des mêmes données au niveau du serveur de publication et de l'Abonné. Vous pouvez spécifier si les conflits sont détectés au niveau de la ligne, auquel cas toute modification apportée à la ligne est considérée comme un conflit, ou au niveau de la colonne, auquel cas seules les modifications apportées aux mêmes ligne et colonne sont considérées comme un conflit. La résolution des conflits pour les articles est réalisée au niveau de la ligne. Pour plus d'informations sur la détection et la résolution des conflits avec des enregistrements logiques, consultez Detecting and Resolving Conflicts in Logical Records.

Limitations et restrictions

  • Si vous modifiez le niveau de suivi une fois les abonnements initialisés, ces derniers doivent être réinitialisés. Pour plus d’informations sur les effets des modifications de propriétés, consultez Changer des propriétés de publication et d’article.
  • Avec le suivi au niveau des lignes et des colonnes, la résolution des conflits est toujours effectuée au niveau des lignes : la ligne gagnante remplace la ligne perdante. La réplication de fusion vous permet également de spécifier que les conflits sont suivis et résolus au niveau des enregistrements logiques, mais ces options ne sont pas disponibles à partir de SQL Server Management Studio. Pour plus d'informations sur la définition de ces options à partir des procédures stockées de réplication, consultez Définir une relation d’enregistrement logique entre des articles de table de fusion.

Utiliser SQL Server Management Studio

Spécifiez le suivi au niveau des lignes ou des colonnes pour les articles de fusion sous l'onglet Propriétés de la boîte de dialogue Propriétés de l'article, disponible dans l'Assistant Nouvelle publication et 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.

Spécifier le suivi au niveau des lignes ou des colonnes

  1. 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.
  2. Cliquez sur Propriétés de l'article, puis cliquez sur Définir les propriétés de l'article de Table en surbrillance ou sur Définir les propriétés de tous les articles de table.
  3. Sous l'onglet Propriétés de la boîte de dialogue Propriétés de l'article – <Article>, sélectionnez l'une des valeurs suivantes pour la propriété Niveau de suivi : Suivi au niveau des lignes ou Suivi au niveau des colonnes.
  4. Si vous êtes dans la boîte de dialogue Propriétés de la publication – <Publication>, cliquez sur OK pour enregistrer et fermer la boîte de dialogue.

Utiliser Transact-SQL

Pour spécifier les options de suivi des conflits pour un nouvel article de fusion

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle et spécifiez l’une des valeurs suivantes pour @column_tracking :

    • true - utiliser le suivi au niveau des colonnes pour l'article.
    • false - utiliser le suivi au niveau des lignes, qui est la valeur par défaut.

Changer les options de suivi des conflits pour un article de fusion

  1. Pour déterminer les options de suivi des conflits pour un article de fusion, exécutez sp_helpmergearticle. Notez la valeur de l'option column_tracking dans le jeu de résultats de l'article. La valeur 1 indique que le suivi au niveau des colonnes est utilisé, tandis que la valeur 0 indique que le suivi au niveau des lignes est utilisé.

  2. Dans la base de données de publication sur le serveur de publication, exécutez sp_changemergearticle. Affectez la valeur column_tracking à @property et l’une des valeurs suivantes à @value :

    • true - utiliser le suivi au niveau des colonnes pour l'article.
    • false - utiliser le suivi au niveau des lignes, qui est la valeur par défaut.

    Affectez la valeur 1 à @force_invalidate_snapshot et @force_reinit_subscription.

Gérer les suppressions de suivi

Remarque

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Par défaut, la réplication de fusion synchronise les commandes DELETE entre le serveur de publication et l'Abonné. La réplication de fusion vous permet de conserver des lignes qui ont été supprimées de la publication dans la base de données d'abonnement, et vice versa. Vous pouvez spécifier par programme que les commandes DELETE doivent être ignorées lors de la création d'un article ou vous pouvez activer cette fonctionnalité ultérieurement à l'aide de procédures stockées de réplication.

Important

L'activation de cette fonctionnalité conduit à une non-convergence ; autrement dit, les données présentes au niveau de l'Abonné ne reflèteront pas correctement les données présentes au niveau du serveur de publication. Vous devez implémenter votre propre mécanisme de manière à supprimer manuellement les lignes supprimées.

Spécifier que les suppressions doivent être ignorées pour un nouvel article de fusion

Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle (Transact-SQL). Affectez la valeur false à @delete_tracking. Pour plus d’informations, consultez définir un Article.

Remarque

Si la table source d'un article est déjà publiée dans une autre publication, la valeur de delete_tracking doit être la même pour les deux articles.

Spécifier que les suppressions doivent être ignorées pour un article de fusion existant

  1. Pour déterminer si la compensation d'erreur est activée pour un article, exécutez sp_helpmergearticle (Transact-SQL) et notez la valeur de delete_tracking dans le jeu de résultats. Si cette valeur est 0, les suppressions sont déjà ignorées.

  2. Si la valeur à l'étape 1 est 1, exécutez sp_changemergearticle (Transact-SQL) sur la base de données de publication au niveau du serveur de publication. Affectez la valeur delete_tracking à @property et la valeur false à @value.

    Remarque

    Si la table source d'un article est déjà publiée dans une autre publication, la valeur de delete_tracking doit être la même pour les deux articles.

Ordre de traitement

La réplication de fusion vous permet de spécifier l'ordre dans lequel les articles sont traités par l'Agent de fusion pendant le processus de synchronisation. Vous pouvez attribuer par programme un ordre à chaque article lors de la création de l'article à l'aide des procédures stockées de réplication. Les articles sont traités à partir de la valeur la plus faible vers la valeur la plus élevée. Si deux articles ont la même valeur, ils sont traités simultanément.

Détermination de l'ordre de traitement

Lors d'une synchronisation de fusion, les articles sont par défaut traités dans l'ordre requis par les dépendances entre les objets, et notamment les contraintes d'intégrité référentielle déclarative (DRI, Declarative Referential Integrity) définies sur les tables de base de données. Le traitement implique l'énumération des modifications apportées à une table, puis l'application de ces modifications. Si aucune intégrité référentielle déclarative n'est présente mais que des filtres de jointure ou des enregistrements logiques existent entre les articles des tables, les articles sont traités dans l'ordre requis par les filtres et les enregistrements logiques. Les articles non liés à d'autres articles via une intégrité référentielle déclarative (DRI), des filtres de jointure, des enregistrements logiques ou d'autres dépendances sont traités en fonction du surnom de l'article dans la table système sysmergearticles (Transact-SQL).

Supposons une publication qui contient les tables SalesOrderHeader et SalesOrderDetail avec une colonne clé primaire SalesOrderID pour la table SalesOrderHeader et une colonne clé étrangère SalesOrderID pour la table SalesOrderDetail . Lors de la synchronisation, la réplication de fusion empêche les violations de clé étrangère en insérant toutes les nouvelles lignes dans SalesOrderHeader avant d'insérer les lignes associées dans SalesOrderDetail. De la même façon, les lignes sont supprimées dans SalesOrderDetail avant que la ligne associée soit supprimée dans SalesOrderHeader.

Cependant, dans certaines applications, l'intégrité référentielle est appliquée via des déclencheurs de base de données ou bien au niveau de l'application, et non pas via une intégrité référentielle déclarative. Étant donnée la publication décrite plus haut, à la place de l'intégrité référentielle déclarative, la table SalesOrderDetail pourrait avoir un déclencheur d'insertion qui vérifie que la ligne associée dans la table SalesOrderHeader existe avant d'autoriser une insertion. SalesOrderHeader pourrait avoir un déclencheur de suppression qui vérifie qu'il n' y a pas de ligne associée dans la table SalesOrderDetail avant d'autoriser une suppression. La réplication de fusion ne prend pas en compte les déclencheurs lors de la détermination de l'ordre de traitement des articles car elle ne peut pas déterminer ce que sera le résultat du déclencheur avant qu'il soit exécuté. De la même façon, la réplication ne peut pas prendre en compte les contraintes définies au niveau de l'application.

Quand l'intégrité référentielle est gérée via des déclencheurs ou au niveau de l'application, vous devez spécifier l'ordre dans lequel les articles doivent être traités. Dans l'exemple avec les déclencheurs, vous pouvez spécifier que la table SalesOrderHeader doit être traitée avant SalesOrderDetail, car l'ordre des articles est basé sur l'ordre d'insertion. La réplication de fusion inverse automatiquement l'ordre pour les suppressions. La réplication de fusion n'échoue pas s'il n'y a pas d'ordre pour les articles, car l'Agent de fusion continue à traiter les articles si une violation de contrainte se produit ; il essaye ensuite à nouveau toutes les opérations qui ont échoué, après le traitement des autres articles. La spécification de l'ordre des articles évite simplement les nouveaux essais et le temps de traitement supplémentaire qui y est associé. Si vous spécifiez un ordre incorrect (par exemple un ordre tel que les enregistrements de détail soient traités avant les enregistrements d'en-tête), la réplication de fusion essaye à nouveau le traitement jusqu'à ce qu'il réussisse.

Nouvel article

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergearticle (Transact-SQL). Spécifiez une valeur entière qui représente l’ordre de traitement de l’article pour @processing_order. Pour plus d’informations, consultez définir un Article.

    Remarque

    Lorsque vous créez des articles ordonnés, vous devez laisser des intervalles entre les valeurs d'ordre des articles. Cela permet de définir facilement de nouvelles valeurs dans le futur. Par exemple, si vous avez trois articles pour lesquels vous devez spécifier un ordre de traitement fixe, affectez à @processing_order les valeurs 10, 20 et 30 plutôt que 1, 2 et 3, respectivement.

Article existant

  1. Pour déterminer l'ordre de traitement d'un article, exécutez sp_helpmergearticle (Transact-SQL) et notez la valeur de processing_order dans le jeu de résultats.
  2. Dans la base de données de publication sur le serveur de publication, exécutez sp_changemergearticle (Transact-SQL). Spécifiez la valeur processing_order pour @property et une valeur entière qui représente l’ordre de traitement pour @value.