Partager via


Comment la réplication par fusion initialise les publications et les abonnements

La réplication de fusion doit initialiser à la fois l'Éditeur et l'Abonné avant que les données puissent circuler entre eux. Cet article fournit des informations sur les étapes qui se produisent pendant l’initialisation.

Initialiser la publication

La liste suivante détaille les étapes d’initialisation d’une publication, qui se produisent lors de l’exécution de chaque procédure stockée répertoriée ou après avoir terminé l’Assistant Nouvelle publication. Une initialisation supplémentaire se produit après la première exécution de l’agent Snapshot pour une publication.

  • sp_replicationdboption

    • La base de données des publications est marquée pour réplication. La base de données ne peut pas être supprimée, sauf si la réplication est supprimée.

    • Les tables système sont ajoutées à la base de données de publication (sauf si une publication de fusion existe déjà dans la base de données). Pour obtenir la liste complète des tables système, consultez la section « Tables système créées dans les bases de données de publication et d’abonnement » de cet article.

  • sp_addmergepublication

    • Les entrées de la publication sont ajoutées aux tables-systèmes.
  • sp_addpublication_snapshot

    • Une tâche Snapshot Agent est ajoutée au système SQL Server Agent. Le nom du travail se trouve sous la forme <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Chaque objet répliqué est marqué pour la réplication. L’objet ne peut pas être supprimé, sauf si l’article correspondant est supprimé de toutes les publications.

    • Les entrées de chaque article sont ajoutées aux tables système.

Le reste de l’initialisation de la base de données de publication s’effectue lors de la première exécution de l’agent Snapshot pour une publication. La base de données de publication n’est pas réinitialisée pendant les exécutions suivantes de l’Agent d’instantané. Si vous utilisez l’Assistant Nouvelle publication, l’instantané initial est créé par défaut une fois l’assistant terminé. Si vous utilisez des procédures stockées, vous devez exécuter la tâche de l’agent ou exécuter l’agent directement. Pour plus d’informations sur l’exécution des agents, consultez Démarrer et arrêter un agent de réplication (SQL Server Management Studio) et les concepts des exécutables de l’agent de réplication.

La première fois que l’agent Snapshot pour une publication s’exécute :

  • Une colonne nommée rowguid est ajoutée à chaque table publiée, sauf si la table possède déjà une colonne de type de données uniqueidentifier avec le ROWGUIDCOL jeu de propriétés (auquel cas cette colonne est utilisée). La rowguid colonne est utilisée pour identifier de manière unique chaque ligne de chaque table publiée. Si la table est supprimée de la publication, la colonne rowguid est supprimée ; si une colonne existante a été utilisée pour le suivi, elle n’est pas supprimée.

  • Les objets suivants sont créés dans la base de données de publication pour chaque table publiée (tous les objets sont créés dans le dbo schéma) :

    • Les déclencheurs d’insertion, les déclencheurs de mise à jour et les déclencheurs de suppression sont ajoutés aux tables publiées pour suivre les modifications. Les déclencheurs sont nommés sous la forme MSmerge_ins_<GUID>, MSmerge_upd_<GUID>et MSmerge_del_<GUID>. La valeur GUID est dérivée de l’entrée de l’article dans la table système sysmergearticles.

    • Les procédures stockées sont créées pour gérer les insertions, les mises à jour et les suppressions dans des tables publiées, et pour effectuer plusieurs autres opérations liées à la réplication.

    • Les vues sont créées pour gérer les insertions, les mises à jour, les suppressions et le filtrage.

    • Les tables de conflit sont créées pour stocker les données sur les conflits. Les tables en conflit correspondent au schéma des tables publiées : chaque table publiée est scriptée, puis le script est utilisé pour créer la table de conflit dans la base de données de publication. Les tables de conflit sont nommées selon le format dbo.MSmerge_conflict_<Publication>_<Article>.

Chaque fois que l’Agent d’instantané s’exécute, les types de fichiers suivants (avec leurs extensions de fichier correspondantes) sont créés pour chaque article de la base de données de publication :

  • Schéma (.sch)

  • Contraintes et index (.dri)

  • Déclencheurs (.trg)

  • Données de table système (.sys)

  • Tables en conflit (.cft)

  • Données (.bcp) : non créées pour les publications avec des filtres paramétrables.

    Si la publication n’utilise aucun filtre paramétrable, l’instantané contient les données des tables publiées dans un ensemble de .bcp fichiers. Si la publication utilise des filtres paramétrables (qui sont typiques des publications de fusion), l’instantané initial ne contient aucune donnée. Les données sont fournies à l’aide d’un instantané pour la partition d’un Abonné, qui est abordée dans la section suivante.

Initialiser un abonnement

Chaque abonnement est initialisé lorsque l’agent de fusion pour l’abonnement s’exécute et copie l’instantané initial dans la base de données d’abonnement. Outre le schéma et les données des objets répliqués, l’instantané contient les tables système, les vues, les déclencheurs et les procédures stockées qui existent dans la base de données de publication. Une ou deux tables système supplémentaires sont également copiées dans la base de données d’abonnement. Pour obtenir la liste complète des tables système, consultez la section Tables système créées dans les bases de données de publication et d’abonnement de cet article. Si un abonnement est réinitialisé, tous les objets répliqués et les objets du système de réplication sont écrasés.

Si aucune des tables de la base de données de publication n’utilise de filtres paramétrables, la même capture instantanée de publication est copiée sur chaque Abonné. Si un ou plusieurs filtres paramétrables sont utilisés, la façon dont chaque abonnement est initialisé est régie par la logique suivante :

  • Si l’emplacement de l’instantané est fourni à l’agent de fusion dans la ligne de commande :

    • Appliquez l’instantané depuis cet emplacement.
  • Sinon, si l’instantané a été prégénéré :

    • Récupérez l’emplacement de l’instantané dans MSmerge_dynamic_snapshots dans la base de données de publication et appliquez l’instantané à partir de cet emplacement.
  • Sinon, si la publication permet aux Abonnés de lancer des instantanés :

    • Si un instantané a déjà été généré pour un autre Abonné avec la même partition, appliquez cet instantané à l’Abonné.

    • Sinon, générez et appliquez un instantané à l’abonné.

  • Sinon, initialisez l’abonné à l’aide d’instructions SELECT sur les tables de la publication. Cette approche est plus lente que l’utilisation d’un instantané pour la partition de l’Abonné.

Si le transfert d’instantané est interrompu à un moment donné, il reprend automatiquement et ne renvoie pas de fichiers qui ont déjà été complètement transférés. L'unité de remise pour l'Agent d'instantané est le fichier bcp pour chaque article de publication, les fichiers partiellement remis doivent donc être remis à nouveau en totalité. Toutefois, la reprise de l’instantané peut réduire considérablement la quantité de données transmises et garantir une remise d’instantanés en temps opportun même si la connexion n’est pas fiable. Pour plus d’informations sur la création d’instantanés, consultez Filtres paramétrables - Filtres de lignes paramétrables.

Emplacement d’instantané

L’emplacement de l’instantané dépend du chemin d’accès spécifié pour l’emplacement d’instantané par défaut ou d’un autre emplacement d’instantané ; si la publication utilise un chemin d’accès UNC ou un partage FTP pour le dossier d’instantanés ; et si la publication utilise des filtres paramétrables. Dans ces exemples, supposons que l’emplacement du dossier des instantanés est : \\<MyComputer>\<MyFolder>

  • Si la publication utilise UNC, la première partie du chemin est la suivante : \\<MyComputer>\<MyFolder>\unc\. Si elle utilise FTP, c’est \\<MyComputer>\<MyFolder>\ftp\.

  • Si la publication utilise UNC et n’utilise pas de filtres paramétrables, le chemin d’accès est\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Si la publication utilise UNC et utilise des filtres paramétrables, l’emplacement est basé sur le chemin du dossier d’instantané et les critères de filtrage de lignes paramétrables pour la publication. Par exemple, si l’article est filtré à l’aide de la HOST_NAME() fonction et que la valeur de HOST_NAME() la partition est SalesLaptop, le chemin d’accès à l’instantané de cette partition est \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, où 12 est l’ID utilisé en interne pour la partition.

Tables système créées dans les bases de données de publication et d’abonnement

Les tableaux suivants sont créés dans la base de données de publication et chaque base de données d’abonnement.

Tableau Descriptif
MSdynamicsnapshotjobs Contient des informations sur les tâches de capture instantanée pour les publications avec filtres paramétrés.
MSdynamicsnapshotviews Effectue le suivi de toutes les vues d’instantané temporaires créées par l’Agent d’instantané. Il est utilisé par le système pour nettoyer les vues en cas d’arrêt anormal de l’agent SQL Server ou de l’agent d’instantané.
MSmerge_altsyncpartners Suivez l’association des partenaires de synchronisation actuels d’un éditeur.
MSmerge_articlehistory Effectue le suivi des modifications apportées aux articles pendant une session de synchronisation de l’Agent de fusion, avec une ligne pour chaque article auquel des modifications ont été apportées.
MSmerge_conflicts_info Effectue le suivi des conflits qui se produisent lors de la synchronisation d’un abonnement à une publication de fusion.
MSmerge_contents Contient une ligne pour chaque ligne modifiée dans la base de données active depuis sa publication. Cette table est utilisée par le processus de fusion pour déterminer les lignes qui ont changé.
MSmerge_current_partition_mappings Contient une ligne pour chaque partition à laquelle appartient une ligne modifiée donnée.
MSmerge_dynamic_snapshots Suit l’emplacement de l’instantané pour chaque partition définie pour une publication de fusion.
MSmerge_errorlineage Contient les lignes qui ont été supprimées chez l’abonné, mais dont la suppression n’a pas été propagée à Publisher.
MSmerge_generation_partition_mappings Suit si une génération donnée contient des modifications pertinentes pour une partition donnée.
MSmerge_genhistory Contient une ligne pour chaque génération. Une génération est un ensemble de modifications qui sont fournies à un éditeur ou à un abonné. Les générations sont fermées chaque fois que l’Agent de fusion s’exécute ; les modifications suivantes dans une base de données sont ajoutées à une ou plusieurs générations ouvertes.
MSmerge_history Contient des lignes d’historique avec des descriptions détaillées des résultats des sessions de travail de l’Agent de fusion précédentes.
MSmerge_identity_range Suivez les plages numériques attribuées aux colonnes d’identité pour les abonnements à des publications pour lesquelles la réplication gère automatiquement les attributions de plages.
MSmerge_metadataaction_request Contient une ligne pour chaque action de compensation requise. Une action de compensation est utilisée pour restaurer une modification à un nœud si la modification a échoué sur un autre nœud.
MSmerge_partition_groups Contient une ligne pour chaque partition précomputée dans une base de données donnée.
MSmerge_past_partition_mappings Contient une ligne pour chaque partition à laquelle une ligne modifiée appartenait auparavant, mais n’appartient plus.
MSmerge_replinfo Contient une ligne pour chaque abonnement. Cette table permet de suivre les informations internes relatives aux générations envoyées et reçues.
MSmerge_sessions Contient les lignes d’historique avec les résultats des sessions précédentes de l’agent de fusion.
MSmerge_settingshistory Contient un historique des modifications apportées aux propriétés d’article et de publication, avec une ligne pour chaque modification apportée.
MSmerge_tombstone Contient des informations sur les lignes supprimées et autorise la propagation des suppressions à d’autres Abonnés.
MSrepl_errors Contient des informations détaillées sur les défaillances de l’agent.
sysmergearticles Contient une ligne pour chaque article de fusion.
sysmergepartitioninfo Contient des informations sur les partitions pour chaque article, avec une ligne pour chaque article.
sysmergepartitioninfoview Contient des informations de partitionnement pour les articles de table.
sysmergepublications Contient une ligne pour chaque publication de fusion.
sysmergeschemaarticles Suivez les articles contenant uniquement des schémas, tels que les procédures stockées.
sysmergeschemachange Contient des informations sur les articles publiés générés par l’agent de capture instantanée.
sysmergesubscriptions Contient une ligne pour chaque Abonné.
sysmergesubsetfilters Contient des informations de filtre de jointure pour les articles partitionnés.

En outre, la MSsnapshotdeliveryprogress table est créée dans chaque base de données d’abonnement et la MSsubscription_properties table est créée dans chaque base de données d’abonnement qui utilise un abonnement par extraction :

Tableau Descriptif
MSsnapshotdeliveryprogress Suivez les fichiers qui ont été livrés avec succès à l’abonné lors de l’application d’un instantané. Ces données sont utilisées pour reprendre la remise des fichiers au cas où l’Agent de fusion ne parvient pas à remettre tous les fichiers pendant la session.
MSsubscription_properties Contient les informations de paramètre requises pour exécuter des agents de réplication sur l’Abonné