Freigeben über


Wie die Mergereplikation Publikationen und Abonnements initialisiert

Die Mergereplikation muss sowohl den Publisher als auch den Abonnenten initialisieren, bevor Daten zwischen ihnen ausgetauscht werden können. Dieser Artikel enthält Informationen zu den Schritten, die während der Initialisierung auftreten.

Publikation initialisieren

In der folgenden Liste werden die Initialisierungsschritte für eine Publikation beschrieben, die relevant sind, wenn Sie jede der aufgeführten gespeicherten Prozeduren ausführen, oder nachdem Sie den Assistenten für neue Veröffentlichungen ausgeführt haben. Weitere Initialisierung erfolgt, nachdem der Snapshot-Agent erstmalig für eine Veröffentlichung ausgeführt wird.

  • sp_replicationdboption

    • Die Publikationsdatenbank ist für die Replikation markiert. Die Datenbank kann nicht gelöscht werden, es sei denn, die Replikation wird entfernt.

    • Systemtabellen werden der Publikationsdatenbank hinzugefügt (es sei denn, eine Zusammenführungsveröffentlichung ist bereits in der Datenbank vorhanden). Eine vollständige Liste der Systemtabellen finden Sie im Abschnitt "Systemtabellen erstellt in den Publikations- und Abonnementdatenbanken" in diesem Artikel.

  • sp_addmergepublication

    • Einträge für die Publikation werden den Systemtabellen hinzugefügt.
  • sp_addpublication_snapshot

    • Dem SQL Server-Agent-System wird ein Snapshot-Agent-Auftrag hinzugefügt. Der Auftragsname befindet sich im Formular <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Jedes replizierte Objekt wird für die Replikation markiert. Das Objekt kann nicht gelöscht werden, es sei denn, der entsprechende Artikel wird aus allen Publikationen gelöscht.

    • Einträge für jeden Artikel werden den Systemtabellen hinzugefügt.

Der Rest der Initialisierung für die Publikationsdatenbank erfolgt während der ersten Ausführung des Snapshot-Agents für eine Publikation. Die Publikationsdatenbank wird während der nachfolgenden Ausführung des Snapshot-Agents nicht erneut initialisiert. Wenn Sie den Assistenten für neue Veröffentlichungen verwenden, wird die anfängliche Momentaufnahme standardmäßig erstellt, nachdem Sie den Assistenten abgeschlossen haben. Wenn Sie gespeicherte Prozeduren verwenden, müssen Sie den Agent-Auftrag ausführen oder den Agenten direkt starten. Weitere Informationen zum Ausführen von Agents finden Sie unter Starten und Beenden eines Replikations-Agents (SQL Server Management Studio) und der Ausführbaren Konzepte des Replikations-Agents.

Die erste Ausführung des Snapshot-Agenten für eine Veröffentlichung:

  • Jeder veröffentlichten Tabelle wird eine Spalte rowguid hinzugefügt, es sei denn, die Tabelle verfügt bereits über eine Spalte vom Datentyp uniqueidentifier mit dem ROWGUIDCOL Eigenschaftensatz (in diesem Fall wird diese Spalte verwendet). Die rowguid Spalte wird verwendet, um jede Zeile in jeder veröffentlichten Tabelle eindeutig zu identifizieren. Wenn die Tabelle aus der Publikation gelöscht wird, wird die rowguid Spalte entfernt. Wenn eine vorhandene Spalte für die Nachverfolgung verwendet wurde, wird die Spalte nicht entfernt.

  • Die folgenden Objekte werden in der Publikationsdatenbank für jede veröffentlichte Tabelle erstellt (alle Objekte werden im dbo Schema erstellt):

    • Auslöser, Aktualisierungstrigger und Löschtrigger werden veröffentlichten Tabellen hinzugefügt, um Änderungen nachzuverfolgen. Die Trigger werden in der Form MSmerge_ins_<GUID>, MSmerge_upd_<GUID>, und MSmerge_del_<GUID> benannt. Der GUID-Wert wird vom Eintrag für den Artikel in der Systemtabelle sysmergearticlesabgeleitet.

    • Gespeicherte Prozeduren werden erstellt, um Einfügungen, Aktualisierungen und Löschvorgänge für veröffentlichte Tabellen zu verarbeiten und mehrere andere replikationsbezogene Vorgänge auszuführen.

    • Ansichten werden erstellt, um Einfügungen, Aktualisierungen, Löschvorgänge und Filterung zu verwalten.

    • Konflikttabellen werden erstellt, um Konfliktinformationen zu speichern. Die Konflikttabellen stimmen mit dem Schema der veröffentlichten Tabellen überein: Jede veröffentlichte Tabelle ist skriptiert, und anschließend wird das Skript verwendet, um die Konflikttabelle in der Publikationsdatenbank zu erstellen. Konflikttabellen werden im Format dbo.MSmerge_conflict_<Publication>_<Article> benannt.

Jedes Mal, wenn der Snapshot-Agent ausgeführt wird, werden die folgenden Dateitypen (mit ihren entsprechenden Dateierweiterungen) für jeden Artikel in der Publikationsdatenbank erstellt:

  • Schema (.sch)

  • Einschränkungen und Indizes (.dri)

  • Auslöser (.trg)

  • Systemtabellendaten (.sys)

  • Konflikttabellen (.cft)

  • Daten (.bcp): nicht für Publikationen mit parametrisierten Filtern erstellt.

    Wenn die Publikation keine parametrisierten Filter verwendet, enthält die Momentaufnahme die Daten für die veröffentlichten Tabellen in einer Reihe von .bcp Dateien. Wenn die Publikation parametrisierte Filter verwendet (die für Zusammenführungspublikationen typisch sind), enthält die anfängliche Momentaufnahme keine Daten. Daten werden mithilfe einer Momentaufnahme für die Partition eines Abonnenten bereitgestellt, die im nächsten Abschnitt erläutert wird.

Initialisieren eines Abonnements

Jedes Abonnement wird initialisiert, wenn der Merge-Agent für das Abonnement ausgeführt wird und den anfänglichen Snapshot in die Abonnementdatenbank kopiert. Neben dem Schema und den Daten aus replizierten Objekten enthält die Momentaufnahme die Systemtabellen, Ansichten, Trigger und gespeicherten Prozeduren, die in der Publikationsdatenbank vorhanden sind. Eine oder zwei zusätzliche Systemtabellen werden ebenfalls in die Abonnementdatenbank kopiert. Eine vollständige Liste der Systemtabellen finden Sie in den Abschnitten "Systemtabellen", die in den Publikations- und Abonnementdatenbanken in diesem Artikel erstellt wurden. Wenn ein Abonnement erneut initialisiert wird, werden alle replizierten Objekte und Replikationssystemobjekte überschrieben.

Wenn keine der Tabellen in der Publikationsdatenbank parametrisierte Filter verwenden, wird dieselbe Publikationsmomentaufnahme an jeden Abonnenten kopiert. Wenn mindestens ein parametrisierter Filter verwendet wird, unterliegt die Art und Weise, in der jedes Abonnement initialisiert wird, der folgenden Logik:

  • Wenn der Speicherort der Momentaufnahme für den Merge-Agenten in der Befehlszeile angegeben wird:

    • Wenden Sie die Momentaufnahme aus diesem Speicherort an.
  • Sonst wenn die Momentaufnahme vorgeneriert wurde:

    • Rufen Sie den Speicherort der Momentaufnahme aus MSmerge_dynamic_snapshots der Publikationsdatenbank ab, und wenden Sie die Momentaufnahme von diesem Speicherort an.
  • Andernfalls, wenn die Publikation Abonnenten das Initiieren von Momentaufnahmen ermöglicht:

    • Wenn für einen anderen Abonnenten bereits eine Momentaufnahme mit derselben Partition generiert wurde, wenden Sie diese Momentaufnahme auf den Abonnenten an.

    • Andernfalls generieren Sie eine Momentaufnahme und wenden sie auf den Abonnenten an.

  • Andernfalls initialisieren Sie den Abonnenten mit SELECT-Anweisungen für die Tabellen in der Veröffentlichung. Dieser Ansatz ist langsamer als die Verwendung einer Momentaufnahme für die Partition des Abonnenten.

Wenn die Momentaufnahmeübertragung zu einem beliebigen Zeitpunkt unterbrochen wird, wird sie automatisch fortgesetzt und sendet keine Dateien erneut, die bereits vollständig übertragen wurden. Die Übermittlungseinheit für den Snapshot-Agent ist die bcp-Datei für jeden Publikationsartikel, sodass Dateien, die teilweise übermittelt werden, vollständig neu zugestellt werden müssen. Das Fortsetzen der Momentaufnahme kann jedoch die übertragene Datenmenge erheblich reduzieren und eine zeitnahe Momentaufnahmeübermittlung sicherstellen, auch wenn die Verbindung nicht zuverlässig ist. Weitere Informationen zum Erstellen von Momentaufnahmen finden Sie unter Parameterisierte Filter – Parametrisierte Zeilenfilter.

Snapshot-Standort

Die Momentaufnahmeposition hängt von: dem Pfad, der für den Standard- oder alternativen Snapshotspeicherort angegeben ist; ob die Publikation einen UNC-Pfad oder eine FTP-Freigabe für den Snapshotordner verwendet; und ob die Publikation parametrisierte Filter verwendet. Gehen Sie in den folgenden Beispielen davon aus, dass der Speicherort des Momentaufnahmeordners lautet: \\<MyComputer>\<MyFolder>

  • Wenn die Publikation UNC verwendet, lautet der erste Teil des Pfads: \\<MyComputer>\<MyFolder>\unc\. Wenn es FTP verwendet, ist es \\<MyComputer>\<MyFolder>\ftp\.

  • Wenn die Publikation UNC verwendet und keine parametrisierten Filter verwendet, lautet der Pfad\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Wenn die Publikation UNC verwendet und parametrisierte Filter verwendet, basiert der Speicherort auf dem Pfad des Snapshotordners und den parametrisierten Zeilenfilterkriterien für die Publikation. Wenn z. B. der Artikel mithilfe der HOST_NAME() Funktion gefiltert wird und der Wert für HOST_NAME() für die Partition SalesLaptop ist, lautet der Pfad zur Momentaufnahme für diese Partition \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, wobei 12 die intern für die Partition verwendete ID ist.

In den Publikations- und Abonnementdatenbanken erstellte Systemtabellen

Die folgenden Tabellen werden in der Publikationsdatenbank und jeder Abonnementdatenbank erstellt.

Tabelle BESCHREIBUNG
MSdynamicsnapshotjobs Enthält Informationen zu Momentaufnahme-Aufträgen für Publikationen mit parameter-gesteuerten Filtern.
MSdynamicsnapshotviews Verfolgt alle vom Snapshot-Agent erstellten temporären Momentaufnahmeansichten nach. Dies wird vom System zum Bereinigen von Ansichten verwendet, wenn ein ungewöhnliches Herunterfahren des SQL Server-Agenten oder des Snapshot-Agenten erfolgt.
MSmerge_altsyncpartners Verfolgt die Zuordnung der aktuellen Synchronisierungspartner für einen Publisher.
MSmerge_articlehistory Verfolgt Änderungen, die während einer Zusammenführungs-Agent-Synchronisierungssitzung an Artikeln vorgenommen wurden, mit einer Zeile für jeden Artikel nach, an dem Änderungen vorgenommen wurden.
MSmerge_conflicts_info Verfolgt Konflikte, die beim Synchronisieren eines Abonnements mit einer Merge-Veröffentlichung auftreten.
MSmerge_contents Enthält eine Zeile für jede Zeile, die seit der Veröffentlichung in der aktuellen Datenbank geändert wurde. Diese Tabelle wird vom Zusammenführungsprozess verwendet, um die geänderten Zeilen zu bestimmen.
MSmerge_current_partition_mappings Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile gehört.
MSmerge_dynamic_snapshots Verfolgt den Speicherort des Schnappschusses für jede Partition, die für eine Merge-Publikation definiert ist.
MSmerge_errorlineage Enthält Zeilen, die beim Abonnenten gelöscht wurden, deren Löschvorgang jedoch nicht an den Herausgeber weitergegeben wird.
MSmerge_generation_partition_mappings Erfasst, ob eine bestimmte Generation änderungen enthält, die für eine bestimmte Partition relevant sind.
MSmerge_genhistory Enthält eine Zeile für jede Generation. Eine Generation ist eine Sammlung von Änderungen, die an einen Herausgeber oder Abonnenten übermittelt werden. Generationen werden jedes Mal geschlossen , wenn der Merge-Agent ausgeführt wird; Nachfolgende Änderungen in einer Datenbank werden einer oder mehreren offenen Generationen hinzugefügt.
MSmerge_history Enthält Verlaufszeilen mit detaillierten Beschreibungen der Ergebnisse früherer Sitzungen von Merge-Agent-Einzelvorgängen.
MSmerge_identity_range Verfolgt die numerischen Bereiche, die Identitätsspalten für Abonnements von Publikationen zugewiesen werden, für die die Replikation automatisch die Bereichszuweisungen verwaltet.
MSmerge_metadataaction_request Enthält eine Zeile für jede ausgleichende Aktion, die erforderlich ist. Eine Ausgleichsaktion wird verwendet, um eine Änderung bei einem Knoten rückgängig zu machen, wenn die Änderung bei einem anderen Knoten fehlgeschlagen ist.
MSmerge_partition_groups Enthält eine Zeile für jede vorkompilierte Partition in einer bestimmten Datenbank.
MSmerge_past_partition_mappings Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile ehemals gehörte, aber nicht mehr gehört.
MSmerge_replinfo Enthält eine Zeile für jedes Abonnement. Diese Tabelle verfolgt interne Informationen zu gesendeten und empfangenen Generationen.
MSmerge_sessions Enthält Verlaufszeilen mit den Ergebnissen früherer Merge-Agent-Einzelvorgangssitzungen.
MSmerge_settingshistory Enthält einen Verlauf der Änderungen, die an Artikel- und Publikationseigenschaften vorgenommen wurden, mit einer Zeile für jede vorgenommene Änderung.
MSmerge_tombstone Enthält Informationen zu gelöschten Zeilen und ermöglicht die Weitergabe von Löschungen an andere Abonnenten.
MSrepl_errors Enthält detaillierte Informationen zu allen Agentfehlern.
sysmergearticles Enthält eine Zeile für jeden zusammengeführten Artikel.
sysmergepartitioninfo Enthält Informationen zu Partitionen für jeden Artikel mit einer Zeile für jeden Artikel.
sysmergepartitioninfoview Enthält Partitionierungsinformationen für Tabellenobjekte.
sysmergepublications Enthält eine Zeile für jede Zusammenführungsveröffentlichung.
sysmergeschemaarticles Verfolgt nur Schemaartikel, z. B. gespeicherte Prozeduren.
sysmergeschemachange Enthält Informationen zu den veröffentlichten Artikeln, die vom Snapshot-Agent generiert werden.
sysmergesubscriptions Enthält eine Zeile für jeden Abonnenten.
sysmergesubsetfilters Enthält Verknüpfungsfilterinformationen für partitionierte Artikel.

Darüber hinaus wird die MSsnapshotdeliveryprogress Tabelle in jeder Abonnementdatenbank erstellt, und die MSsubscription_properties Tabelle wird in jeder Abonnementdatenbank erstellt, die ein Pullabonnement verwendet:

Tabelle BESCHREIBUNG
MS-Schnappschusslieferfortschritt Verfolgt Dateien, die erfolgreich unter Verwendung einer Momentaufnahme an den Abonnenten übermittelt wurden. Diese Daten werden verwendet, um die Übermittlung von Dateien fortzusetzen, falls der Zusammenführungs-Agent während der Sitzung nicht alle Dateien übermittelt.
MSsubscription_properties Enthält die Parameterinformationen, die zum Ausführen von Replikationsagenten beim Abonnenten erforderlich sind.