Partager via


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

La réplication de fusion doit initialiser à la fois le serveur de publication et l'Abonné avant que les données ne puissent circuler entre eux. Cette rubrique fournit des informations sur les étapes se produisant pendant l'initialisation.

Initialisation de la publication

La liste qui suit donne des détails sur les étapes d'initialisation d'une publication qui se produisent au fur et à mesure que vous exécutez chaque procédure stockée listée, ou une fois l'Assistant Nouvelle publication terminé. L'initialisation se poursuit après la première exécution de l'Agent de capture instantanée pour une publication.

  • sp_replicationdboption

    • La base de données de publication est marquée pour la réplication. Il est impossible de supprimer la base de données à moins de supprimer la réplication.

    • Les tables système sont ajoutées aux bases de données de publication (sauf si une publication de fusion existe déjà dans la base de données). Pour une 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 » dans cette rubrique.

  • sp_addmergepublication

    • Les entrées pour la publication sont ajoutées aux tables système.
  • sp_addpublication_snapshot

    • Un travail de l'Agent de capture instantanée est ajouté au système SQL Server Agent. Le nom du travail se présente sous la forme <ServeurPublication>-<BaseDonnéesPublication>-<Publication>-<Entier>.
  • sp_addmergearticle

    • Chaque objet répliqué est marqué pour la réplication. Il est impossible de supprimer l'objet à moins de supprimer l'article correspondant de toutes les publications.

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

La suite de l'initialisation pour la base de données de publication se produit pendant l'exécution initiale de l'Agent de capture instantanée pour une publication (la base de données de publication n'est pas réinitialisée lors des exécutions suivantes de l'Agent de capture instantanée). Si vous utilisez l'Assistant Nouvelle publication, la capture instantanée initiale est créée par défaut une fois l'assistant terminé. Si vous utilisez les procédures stockées, vous devez exécuter le travail de l'Agent ou exécuter directement l'Agent. Pour plus d'informations sur l'exécution des agents, consultez Procédure : démarrer et arrêter un Agent de réplication (SQL Server Management Studio) et Concepts des exécutables de l'agent de réplication.

Lors de la première exécution de l'Agent de capture instantanée pour une publication :

  • Une colonne nommée rowguid est ajoutée à chaque table publiée, sauf si la table dispose déjà d'une colonne de type de données uniqueidentifier avec la propriété ROWGUIDCOL définie (auquel cas cette colonne est utilisée). La colonne rowguid est utilisée pour identifier de façon unique chaque ligne dans chaque table publiée. Si la table est supprimée de la publication, la colonne rowguid est supprimée, si une colonne existante était utilisée pour le suivi, la colonne 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 schéma dbo) :

    • Les déclencheurs d'insertion, de mise à jour et de suppression sont ajoutés aux tables publiées pour assurer le suivi des modifications. Les déclencheurs se présentent 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 de la table système sysmergearticles.

    • Les procédures stockées sont créées pour gérer les insertions, les mises à jour et les suppressions sur les tables publiées, ainsi que pour effectuer d'autres opérations associé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 conflits sont créées pour stocker des informations sur les conflits. Les tables de conflits correspondent au schéma des tables publiées : chaque table publiée fait l'objet d'un script, le script sert ensuite à créer la table des conflits dans la base de données de publication. Les tables de conflits se présentent sous la forme dbo.MSmerge_conflict_<Publication>_<Article>.

À chaque exécution de l'Agent de capture instantanée, les types de fichiers suivants (avec leurs extensions de fichiers 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 de conflits (.cft)

  • Données (.bcp) -- non créé pour les publications avec filtres paramétrés.

    Si la publication n'utilise aucun filtre paramétré, la capture instantanée contient les données pour les tables publiées dans un ensemble de fichiers .bcp. Si la publication utilise les filtres paramétrés (ce qui est généralement le cas pour les publications de fusion), la capture instantanée ne contient aucune donnée. Les données sont fournies en utilisant une capture instantanée pour une partition d'Abonné, décrite dans la section « Initialisation d'un abonnement ».

Initialisation d'un abonnement

Chaque abonnement est initialisé lorsque l'Agent de fusion pour l'abonnement s'exécute et copie la capture instantanée sur la base de données d'abonnement. En plus du schéma et des données des objets répliqués, la capture instantanée 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 sont également copiées sur la base de données d'abonnement). Pour une 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 » dans cette rubrique. Si un abonnement est réinitialisé, tous les objets répliqués et tous les objets de système de réplication sont remplacés.

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

  • Si l'emplacement de la capture instantanée est fournie à l'Agent de fusion sur la ligne de commande :

    • Appliquez la capture instantanée à partir de cet emplacement.
  • Sinon, si la capture instantanée a été générée à l'avance :

    • Récupérez l'emplacement de la capture instantanée à partir de MSmerge_dynamic_snapshots dans la base de données de publication et appliquez la capture instantanée à partir de cet emplacement.
  • Sinon, si la publication autorise les Abonnés à initier les captures instantanées :

    • Si une capture instantanée a déjà été générée pour un autre Abonné avec la même partition, appliquez cette capture instantanée sur l'Abonné.

    • Sinon, générez et appliquez une capture instantanée sur l'Abonné :

  • Sinon, initialisez l'Abonné à l'aide des instructions SELECT sur les tables de la publication. Cette approche est beaucoup plus lente que l'utilisation d'une capture instantanée pour la partition de l'Abonné.

Si le transfert de la capture instantanée est interrompu à n'importe quel moment, il reprendra automatiquement et ne renverra aucun fichier déjà transféré en totalité. L'unité de remise pour l'Agent de capture instantanée est le fichier bcp pour chaque article de publication, les fichiers partiellement remis doivent donc être remis à nouveau en totalité. Cependant, la reprise de la capture instantanée peut diminuer de manière significative la quantité de données transmise et garantir la remise de la capture instantanée en temps voulu, même si la connexion n'est pas fiable. Pour plus d'informations sur la création des captures instantanées, consultez Captures instantanées des publications de fusion avec des filtres paramétrés.

Emplacement de la capture instantanée

L'emplacement de la capture instantanée dépend : du chemin d'accès spécifié pour l'emplacement de la capture instantanée par défaut ou de remplacement, de l'utilisation ou non par la publication d'un chemin d'accès universel UNC ou d'un partage FTP pour le dossier de captures instantanées, et de l'utilisation ou non par la publication de filtres paramétrés. Dans les exemples qui suivent, l'emplacement du dossier de captures instantanées supposé est : \\<Poste de travail>\<Mon dossier>\:

  • Si la publication utilise UNC, la première partie du chemin d'accès est : \\<Poste de travail>\<Mon dossier>\unc\: Si elle utilise FTP : \\<Poste de travail>\<Mon dossier>\ftp\:

  • Si la publication utilise UNC mais pas les filtres paramétrés, le chemin d'accès est : \\<Poste de travail>\<Mon dossier>\unc\<Serveur de publication>_<Base de données de publication>_<publication>

  • Si la publication utilise UNC et le filtrage des lignes paramétrable, l'emplacement est basé sur le chemin d'accès du dossier de captures instantanées et sur les critères de filtrage des lignes paramétrable pour la publication. Par exemple, si l'article est filtré à l'aide de la fonction HOST_NAME() et que la valeur de HOST_NAME() pour la partition est « Ventes portables », le chemin d'accès à la capture instantanée pour cette partition est : \\<Poste de travail>\<Mon dossier>\unc\<Serveur de publication>_<Base de données de publication>_<publication>\Ventes portables_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 tables suivantes sont créées dans la base de données de publication et dans chaque base de données d'abonnement.

Table

Description

MSdynamicsnapshotjobs (Transact-SQL)

Contient des informations sur les travaux de capture instantanée pour les publications avec filtres paramétrés.

MSdynamicsnapshotviews (Transact-SQL)

Assure le suivi de toutes les vues de captures instantanées temporaires créées par l'Agent de capture instantanée. Cette table est utilisée par le système pour nettoyer les vues dans le cas d'un arrêt anormal de l'Agent SQL Server ou de l'Agent de capture instantanée.

MSmerge_altsyncpartners (Transact-SQL)

Assure le suivi des associations pour savoir quels sont les partenaires de synchronisation actuels pour un serveur de publication.

MSmerge_articlehistory (Transact-SQL)

Assure le suivi des modifications effectuées sur les articles lors d'une session de synchronisation de l'Agent de fusion, avec une ligne pour chaque article comportant des modifications.

MSmerge_conflicts_info (Transact-SQL)

Assure le suivi des conflits se produisant lors de la synchronisation d'un abonnement sur une publication de fusion.

MSmerge_contents (Transact-SQL)

Contient une ligne par ligne modifiée dans la base de données active depuis sa publication. Cette table est utilisée par le processus de fusion afin de déterminer les lignes qui ont été modifiées.

MSmerge_current_partition_mappings

Contient une ligne pour chaque partition à laquelle appartient une ligne modifiée donnée.

MSmerge_dynamic_snapshots (Transact-SQL)

Assure le suivi de l'emplacement de la capture instantanée pour chaque partition d'une publication de fusion.

MSmerge_errorlineage (Transact-SQL)

Contient les lignes ayant été supprimées sur l'Abonné, mais dont la suppression n'a pas été propagée sur le serveur de publication.

MSmerge_generation_partition_mappings (Transact-SQL)

Assure le suivi pour voir si une génération donnée contient des modifications appropriées à une partition donnée.

MSmerge_genhistory (Transact-SQL)

Contient une ligne pour chaque génération. Une génération est une collection de modifications remise à un serveur de publication ou à un Abonné. Les générations sont fermées à chaque exécution de l'Agent de fusion, les modifications suivantes dans une base de données sont ajoutées sur une ou plusieurs générations ouvertes.

MSmerge_history (Transact-SQL)

Contient les lignes d'historique avec des descriptions détaillées des résultats des sessions précédentes du travail de l'Agent de fusion.

MSmerge_identity_range (Transact-SQL)

Assure le suivi des plages numériques attribuées aux colonnes d'identité des abonnements pour les publications pour lesquelles la réplication gère automatiquement les affectations de plage.

MSmerge_metadataaction_request (Transact-SQL)

Contient une ligne pour chaque action de compensation requise. Une action de compensation sert à restaurer une modification sur un nœud si la modification a échoué sur un autre nœud.

MSmerge_partition_groups (Transact-SQL)

Contient une ligne pour chaque partition précalculée dans une base de données spécifiée.

MSmerge_past_partition_mappings (Transact-SQL)

Contient une ligne pour chaque partition à laquelle appartenait une ligne modifiée, mais n'appartient plus.

MSmerge_replinfo (Transact-SQL)

Contient une ligne pour chaque abonnement. Cette table consigne des informations internes sur les générations envoyées et reçues.

MSmerge_sessions (Transact-SQL)

Contient les lignes d'historique avec les résultats des sessions précédentes du travail de l'Agent de fusion.

MSmerge_settingshistory (Transact-SQL)

Contient un historique des modifications effectuées sur les propriétés d'article et de publication, avec une ligne pour chaque modification effectuée.

MSmerge_tombstone (Transact-SQL)

Contient des informations sur les lignes supprimées et permet la diffusion des suppressions aux autres abonnés.

MSrepl_errors (Transact-SQL)

Contient des informations détaillées sur les échecs de l'Agent.

sysmergearticles (Transact-SQL)

Contient une ligne pour chaque article de fusion.

sysmergepartitioninfo (Transact-SQL)

Contient des informations sur les partitions de chaque article, avec une ligne par article.

sysmergepartitioninfoview (Transact-SQL)

Contient des informations de partitionnement pour les articles de table.

sysmergepublications (Transact-SQL)

Contient une ligne pour chaque publication de fusion.

sysmergeschemaarticles (Transact-SQL)

Assure le suivi des articles de schéma uniquement, comme les procédures stockées.

sysmergeschemachange (Transact-SQL)

Contient des informations sur les articles publiés générés par l'Agent de capture instantanée.

sysmergesubscriptions (Transact-SQL)

Contient une ligne pour chaque Abonné.

sysmergesubsetfilters (Transact-SQL)

Contient des informations sur les filtres de jointure des articles partitionnés.

De plus, la table MSsnapshotdeliveryprogress est créée dans chaque base de données d'abonnement, et la table MSsubscription_properties est créée dans chaque base de données d'abonnement utilisant un abonnement par extraction de données (pull) :

Table

Description

MSsnapshotdeliveryprogress (Transact-SQL)

Assure le suivi des fichiers correctement remis sur l'Abonné lors de l'application de la capture instantanée. Ces données sont utilisées pour reprendre la remise des fichiers au cas où l'Agent de fusion n'arrive pas à remettre tous les fichiers pendant la session.

MSsubscription_properties (Transact-SQL)

Contient les informations sur les paramètres nécessaires à l'exécution des agents de réplication sur l'Abonné.