Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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_replicationdboptionLa 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>.
- Une tâche Snapshot Agent est ajoutée au système SQL Server Agent. Le nom du travail se trouve sous la forme
sp_addmergearticleChaque 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
rowguidest ajoutée à chaque table publiée, sauf si la table possède déjà une colonne de type de données uniqueidentifier avec leROWGUIDCOLjeu de propriétés (auquel cas cette colonne est utilisée). Larowguidcolonne 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 colonnerowguidest 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
dbosché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>etMSmerge_del_<GUID>. La valeur GUID est dérivée de l’entrée de l’article dans la table systèmesysmergearticles.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
.bcpfichiers. 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_snapshotsdans la base de données de publication et appliquez l’instantané à partir de cet emplacement.
- Récupérez l’emplacement de l’instantané dans
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
SELECTsur 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 deHOST_NAME()la partition estSalesLaptop, le chemin d’accès à l’instantané de cette partition est\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, où12est 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é |