Funktionsweise des Initialisierens von Veröffentlichungen und Abonnements durch die Mergereplikation

Damit der Datenfluss zwischen Verleger und Abonnent erfolgen kann, müssen beide durch die Mergereplikation initialisiert werden. Dieses Thema enthält Informationen zu den Initialisierungsschritten.

Initialisieren der Veröffentlichung

In der folgenden Liste werden die Initialisierungsschritte für eine Veröffentlichung aufgeführt. Die Schritte erfolgen, wenn Sie die einzelnen gespeicherten Prozeduren ausführen oder nachdem Sie den Assistenten für neue Veröffentlichung abgeschlossen haben. Eine weitere Initialisierung findet statt, nachdem der Snapshot-Agent für eine Veröffentlichung erstmalig ausführt wurde.

  • sp_replicationdboption

    • Die Veröffentlichungsdatenbank ist für die Replikation gekennzeichnet. Die Datenbank kann erst gelöscht werden, wenn die Replikation entfernt wurde.

    • Systemtabellen werden der Veröffentlichungsdatenbank hinzugefügt (sofern noch keine Mergeveröffentlichung in der Datenbank vorhanden ist). Eine vollständige Liste der Systemtabellen finden Sie im Abschnitt zu den Systemtabellen, die in den Veröffentlichungs- und den Abonnementdatenbanken erstellt werden, in diesem Thema.

  • sp_addmergepublication

    • Einträge für die Veröffentlichung werden den Systemtabellen hinzugefügt.
  • sp_addpublication_snapshot

    • Ein Snapshot-Agent-Auftrag wird dem SQL Server-Agent-System hinzugefügt. Der Auftragsname hat das Format <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Jedes replizierte Objekt wird für die Replikation gekennzeichnet. Das Objekt kann erst gelöscht werden, wenn der entsprechende Artikel aus allen Veröffentlichungen gelöscht wurde.

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

Die restliche Initialisierung für die Veröffentlichungsdatenbank erfolgt beim erstmaligen Ausführen des Snapshot-Agents für eine Veröffentlichung (die Veröffentlichungsdatenbank wird nicht erneut initialisiert, wenn der Snapshot-Agent anschließend wieder ausgeführt wird.) Wenn Sie den Assistenten für neue Veröffentlichung verwenden, wird der erste Snapshot standardmäßig nach Abschluss des Assistenten erstellt. Bei der Verwendung gespeicherter Prozeduren müssen Sie den Agentauftrag oder den Agent direkt ausführen. Weitere Informationen zum Ausführen von Agents finden Sie unter Vorgehensweise: Starten und Beenden eines Replikations-Agents (SQL Server Management Studio) und Ausführbare Konzepte für die Programmierung von Replikations-Agents.

Beim ersten Ausführen des Snapshot-Agents für eine Veröffentlichung geschieht Folgendes:

  • Jeder veröffentlichten Tabelle wird eine Spalte mit dem Namen rowguid hinzugefügt, es sei denn, für die Tabelle wurde bereits eine Spalte des uniqueidentifier-Datentyps mit der ROWGUIDCOL-Eigenschaft angegeben (dann wird diese Spalte verwendet). Mithilfe der rowguid-Spalte werden die einzelnen Zeilen in jeder veröffentlichten Tabelle eindeutig bezeichnet. Beim Löschen der Tabelle aus der Veröffentlichung wird auch die rowguid-Spalte entfernt. Wurde eine vorhandene Spalte zur Nachverfolgung verwendet, wird die Spalte nicht entfernt.

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

    • INSERT-, UPDATE- und DELETE-Trigger werden veröffentlichten Tabellen hinzugefügt, damit Änderungen nachverfolgt werden können. Die Trigger werden jeweils im folgenden Format benannt: MSmerge_ins_<GUID>, MSmerge_upd_<GUID> und MSmerge_del_<GUID>. Der GUID-Wert wird von dem Eintrag für den Artikel in der sysmergearticles-Systemtabelle abgeleitet.

    • Für das Verarbeiten von Einfügungen, Aktualisierungen und Löschungen bei veröffentlichten Tabellen und für eine Reihe weiterer replikationsbezogener Vorgänge werden gespeicherte Prozeduren erstellt.

    • Zum Verwalten von Einfügungen, Aktualisierungen, Löschungen und Filterungen werden Sichten erstellt.

    • Zum Speichern von Konfliktinformationen werden Konflikttabellen erstellt. Die Konflikttabellen stimmen mit dem Schema der veröffentlichten Tabellen überein: Für jede veröffentlichte Tabelle wird ein Skript erstellt, das dann zum Erstellen der Konflikttabelle in der Veröffentlichungsdatenbank verwendet wird.Konflikttabellen werden im Format dbo.MSmerge_conflict_<Publication>_<Article> benannt.

Bei jedem Ausführen des Snapshot-Agents werden die folgenden Dateitypen (mit den entsprechenden Dateierweiterungen) für jeden Artikel in der Veröffentlichungsdatenbank erstellt:

  • Schema (SCH)

  • Einschränkungen und Indizes (DRI)

  • Trigger (TRG)

  • Systemtabellendaten (SYS)

  • Konflikttabellen (CFT)

  • Daten (BCP) -- werden für Veröffentlichungen mit parametrisierten Filtern nicht erstellt.

    Wenn die Veröffentlichung keine parametrisierten Filter verwendet, enthält der Snapshot die Daten für die veröffentlichten Tabellen in einem Satz von BCP-Dateien. Verwendet die Veröffentlichung parametrisierte Filter (typisch bei Mergeveröffentlichungen), enthält der erste Snapshot keine Daten. Die Daten werden anhand eines Snapshots für eine Abonnentenpartition bereitgestellt (dies wird im Abschnitt zum Initialisieren eines Abonnements erläutert).

Initialisieren eines Abonnements

Jedes Abonnement wird initialisiert, wenn der Merge-Agent für das Abonnement ausgeführt wird und den ursprünglichen Snapshot in die Abonnementdatenbank kopiert. Neben dem Schema und den Daten aus replizierten Objekten enthält der Snapshot die Systemtabellen, Sichten, Trigger und gespeicherten Prozeduren, die in der Veröffentlichungsdatenbank vorhanden sind (eine oder zwei zusätzliche Systemtabellen werden ebenfalls in die Abonnementdatenbank kopiert). Eine vollständige Liste der Systemtabellen finden Sie im Abschnitt zu den Systemtabellen, die den Veröffentlichungs- und den Abonnementdatenbanken erstellt werden, in diesem Thema. Beim erneuten Initialisieren eines Abonnements werden alle replizierten Objekte und Replikationssystemobjekte überschrieben.

Wenn keine der Tabellen in der Veröffentlichungsdatenbank parametrisierte Filter verwendet, wird derselbe Veröffentlichungssnapshot auf jeden Abonnenten kopiert. Werden ein oder mehrere parametrisierte Filter verwendet, bestimmt die folgende Logik, auf welche Weise die einzelnen Abonnements initialisiert werden:

  • Führen Sie folgende Aufgaben aus, wenn der Snapshotspeicherort in der Befehlszeile für den Merge-Agent angegeben wird:

    • Wenden Sie den Snapshot von diesem Speicherort an.
  • Wenn der Snapshot vorab generiert wurde, gehen Sie folgendermaßen vor:

    • Rufen Sie den Speicherort des Snapshots aus MSmerge_dynamic_snapshots in der Veröffentlichungsdatenbank ab, und wenden Sie den Snapshot von diesem Speicherort an.
  • Wenn die Veröffentlichung das Initialisieren von Snapshots durch Abonnenten zulässt, gehen Sie folgendermaßen vor:

    • Wurde ein Snapshot bereits für einen anderen Abonnenten mit derselben Partition generiert, dann wenden Sie diesen Snapshot auf den Abonnenten an.

    • Anderenfalls generieren Sie einen Snapshot, und wenden Sie ihn auf den Abonnenten an.

  • Initialisieren Sie ansonsten den Abonnenten mithilfe von SELECT-Anweisungen für die Tabellen in der Veröffentlichung. Diese Vorgehensweise ist erheblich langsamer als die Verwendung eines Snapshots für die Partition des Abonnenten.

Falls das Übertragen des Snapshots an einer Stelle unterbrochen wird, wird es anschließend automatisch fortgesetzt. Bereits vollständig übertragene Dateien werden nicht noch einmal gesendet. Teilweise übermittelte Dateien müssen vollständig neu übermittelt werden, da beim Snapshot-Agent die BCP-Datei für jeden Veröffentlichungsartikel zur Übermittlung verwendet wird. Das Fortsetzen der Snapshotübertragung kann jedoch die Menge der übermittelten Daten erheblich reduzieren und eine rechtzeitige Übermittlung des Snapshots auch bei einer unzuverlässigen Verbindung sicherstellen. Weitere Informationen zum Erstellen von Snapshots finden Sie unter Snapshots für Mergeveröffentlichungen mit parametrisierten Filtern.

Snapshotspeicherort

Der Snapshotspeicherort hängt von Folgendem ab: dem für den standardmäßigen oder alternativen Snapshotspeicherort angegebenen Pfad, ob die Veröffentlichung einen UNC-Pfad oder eine FTP-Freigabe für den Snapshotordner aufweist und ob für die Veröffentlichung parametrisierte Filter verwendet werden. Bei diesen Beispielen wird von folgendem Speicherort für den Snapshotordner ausgegangen: \\<MyComputer>\<MyFolder>\:

  • Wenn die Veröffentlichung einen UNC-Pfad aufweist, lautet der erste Teil wie folgt: \\<MyComputer>\<MyFolder>\unc\. Wenn FTP verwendet wird, lautet er: \\<MyComputer>\<MyFolder>\ftp\.

  • Weist die Veröffentlichung einen UNC-Pfad, aber keine parametrisierten Filter auf, lautet der Pfad: \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Werden für die Veröffentlichung ein UNC-Pfad und parametrisierte Filter verwendet, basiert der Speicherort auf dem Pfad für den Snapshotordner und den Kriterien für parametrisierte Zeilenfilter der Veröffentlichung: Wenn der Artikel z. B. mit der HOST_NAME()-Funktion gefiltert wird und der Wert von HOST_NAME() für die Partition 'SalesLaptop' lautet, lautet der Pfad zum Snapshot 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 Veröffentlichungs- und den Abonnementdatenbanken erstellte Systemtabellen

Die folgenden Tabellen werden in der Veröffentlichungsdatenbank und den einzelnen Abonnementdatenbanken erstellt.

Tabelle

Beschreibung

MSdynamicsnapshotjobs (Transact-SQL)

Enthält Informationen zu Snapshotaufträgen für Veröffentlichungen mit parametrisierten Filtern.

MSdynamicsnapshotviews (Transact-SQL)

Verfolgt alle temporären Snapshotsichten nach, die der Snapshot-Agent erstellt hat. Wird vom System für einen Cleanup der Sichten verwendet, wenn der SQL Server-Agent oder der Snapshot-Agent nicht normal heruntergefahren wurde.

MSmerge_altsyncpartners (Transact-SQL)

Verfolgt nach, welche aktuellen Synchronisierungspartner einem Verleger zugeordnet sind.

MSmerge_articlehistory (Transact-SQL)

Verfolgt Änderungen an Artikeln nach, die der Merge-Agent während einer Synchronisierungssitzung vorgenommen hat. Für jeden geänderten Artikel wird jeweils eine Zeile aufgenommen.

MSmerge_conflicts_info (Transact-SQL)

Verfolgt Konflikte nach, die beim Synchronisieren eines Abonnements mit einer Mergeveröffentlichung auftreten.

MSmerge_contents (Transact-SQL)

Enthält eine Zeile für jede Zeile, die in der aktuellen Datenbank geändert wurde, seit diese veröffentlicht wurde. Diese Tabelle wird vom Mergeprozess verwendet, um die geänderten Zeilen zu ermitteln.

MSmerge_current_partition_mappings

Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile gehört.

MSmerge_dynamic_snapshots (Transact-SQL)

Verfolgt den Speicherort des Snapshots für jede Partition nach, die für eine Mergeveröffentlichung definiert ist.

MSmerge_errorlineage (Transact-SQL)

Enthält Zeilen, die auf dem Abonnenten gelöscht wurden, deren Löschung aber nicht an den Verleger weitergegeben wurde.

MSmerge_generation_partition_mappings (Transact-SQL)

Verfolgt nach, ob eine bestimmte Generierung Änderungen enthält, die für eine bestimmte Partition relevant sind.

MSmerge_genhistory (Transact-SQL)

Enthält eine Zeile für jede Generierung. Eine Generierung ist eine Auflistung von Änderungen, die an einen Verleger oder Abonnenten übermittelt wird. Generierungen werden bei jedem Ausführen des Merge-Agents geschlossen; anschließende Änderungen in einer Datenbank werden einer oder mehreren geöffneten Generierungen hinzugefügt.

MSmerge_history (Transact-SQL)

Enthält Verlaufszeilen mit genauen Beschreibungen der Ergebnisse vorheriger Auftragssitzungen des Merge-Agents.

MSmerge_identity_range (Transact-SQL)

Verfolgt die numerischen Bereiche nach, die Identitätsspalten für Veröffentlichungsabonnements zugewiesen sind, deren Bereichszuweisungen automatisch durch die Replikation verwaltet werden.

MSmerge_metadataaction_request (Transact-SQL)

Enthält eine Zeile für jede erforderliche kompensierende Aktion. Mit einer kompensierenden Aktion wird ein Rollback für eine Änderung an einem Knoten ausgeführt, falls die Änderung bei einem anderen Knoten einen Fehler verursacht.

MSmerge_partition_groups (Transact-SQL)

Enthält eine Zeile für jede vorausberechnete Partition in einer bestimmten Datenbank.

MSmerge_past_partition_mappings (Transact-SQL)

Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile einmal gehört hat, aber nicht länger gehört.

MSmerge_replinfo (Transact-SQL)

Enthält eine Zeile für jedes Abonnement. Diese Tabelle verfolgt interne Informationen zu gesendeten und empfangenen Generierungen nach.

MSmerge_sessions (Transact-SQL)

Enthält Verlaufszeilen mit den Ergebnissen vorheriger Auftragssitzungen des Merge-Agents.

MSmerge_settingshistory (Transact-SQL)

Enthält den Verlauf der Änderungen an Artikel- und Veröffentlichungseigenschaften. Für jede Änderung wird jeweils eine Zeile aufgenommen.

MSmerge_tombstone (Transact-SQL)

Enthält Informationen zu gelöschten Zeilen und lässt die Weitergabe von Löschvorgängen an andere Abonnenten zu.

MSrepl_errors (Transact-SQL)

Enthält genaue Informationen zu jedem Agentfehler.

sysmergearticles (Transact-SQL)

Enthält eine Zeile für jeden Mergeartikel.

sysmergepartitioninfo (Transact-SQL)

Enthält Informationen zu Partitionen für jeden Artikel. Für jeden Artikel wird jeweils eine Zeile aufgenommen.

sysmergepartitioninfoview (Transact-SQL)

Enthält Partitionsinformationen für Tabellenartikel.

sysmergepublications (Transact-SQL)

Enthält eine Zeile für jede Mergeveröffentlichung.

sysmergeschemaarticles (Transact-SQL)

Verfolgt Artikel vom Typ schema only nach, z. B. gespeicherte Prozeduren.

sysmergeschemachange (Transact-SQL)

Enthält Informationen zu den vom Snapshot-Agent generierten veröffentlichten Artikel.

sysmergesubscriptions (Transact-SQL)

Enthält eine Zeile für jeden Abonnent.

sysmergesubsetfilters (Transact-SQL)

Enthält Informationen zu Verknüpfungsfiltern für partitionierte Artikel.

Außerdem wird die MSsnapshotdeliveryprogress-Tabelle in jeder Abonnementdatenbank erstellt, und die MSsubscription_properties-Tabelle wird in jeder Abonnementdatenbank erstellt, die ein Pullabonnement aufweist:

Tabelle

Beschreibung

MSsnapshotdeliveryprogress (Transact-SQL)

Verfolgt die Dateien nach, die beim Anwenden eines Snapshots erfolgreich an den Abonnenten übermittelt wurden. Mithilfe dieser Daten wird die Übermittlung der Dateien fortgesetzt, falls der Merge-Agent in einer Sitzung nicht alle Dateien übermitteln konnte.

MSsubscription_properties (Transact-SQL)

Enthält die Parameter, die zum Ausführen von Replikations-Agents für den Abonnenten erforderlich sind.