Funktionsweise der Snapshotreplikation

Standardmäßig verwenden alle drei Replikationstypen einen Snapshot zum Initialisieren von Abonnenten. Die Snapshotdateien werden stets vom SQL Server-Snapshot-Agent generiert. Welcher Agent die Dateien jedoch übermittelt, hängt vom verwendeten Replikationstyp ab. Bei der Snapshot- und der Transaktionsreplikation werden die Dateien vom Verteilungs-Agent übermittelt, wohingegen die Dateien bei der Mergereplikation vom SQL Server-Merge-Agent übermittelt werden. Der Snapshot-Agent wird auf dem Verteiler ausgeführt. Der Verteilungs-Agent oder der Merge-Agent werden auf dem Verteiler für Pushabonnements oder auf dem Abonnenten für Pullabonnements ausgeführt. Weitere Informationen zu Push- und Pullabonnements finden Sie unter Abonnieren von Veröffentlichungen. Weitere Informationen zu Agents finden Sie unter Replikations-Agents (Übersicht).

Snapshots können entweder sofort nach dem Erstellen des Abonnements generiert und angewendet werden oder nach einem Zeitplan, der zum Zeitpunkt der Erstellung der Veröffentlichung festgelegt wurde. Der Snapshot-Agent bereitet Snapshotdateien vor, die das Schema und die Daten von veröffentlichten Tabellen und Datenbankobjekten enthalten, speichert die Dateien im Snapshotordner und zeichnet Nachverfolgungsinformationen in der Verteilungsdatenbank auf dem Verteiler auf. Beim Konfigurieren eines Verteilers geben Sie einen Standardsnapshotordner an, Sie können jedoch stattdessen oder zusätzlich einen alternativen Speicherort für eine Veröffentlichung angeben. Weitere Informationen finden Sie unter Alternative Speicherorte für Snapshotordner.

HinweisHinweis

Neben dem Standardprozess für Snapshots, der in diesem Thema beschrieben wird, wird ein zweiteiliger Snapshotprozess für Mergeveröffentlichungen mit parametrisierten Filtern verwendet. Weitere Informationen finden Sie unter Snapshots für Mergeveröffentlichungen mit parametrisierten Filtern.

Die folgende Abbildung zeigt die wichtigsten Komponenten der Snapshotreplikation.

Komponenten und Datenfluss für Momentaufnahmereplikation

Snapshot-Agent

Bei der Mergereplikation wird jedes Mal ein Snapshot generiert, wenn der Snapshot-Agent ausgeführt wird. Bei der Transaktionsreplikation hängt die Snapshotgenerierung von der Einstellung der immediate_sync-Veröffentlichungseigenschaft ab. Ist die Eigenschaft auf TRUE festgelegt (die Standardeinstellung bei der Verwendung des Assistenten für neue Veröffentlichung), wird bei jedem Ausführen des Snapshot-Agents ein Snapshot generiert, der jederzeit auf einen Abonnenten angewendet werden kann. Ist die Eigenschaft auf FALSE festgelegt (die Standardeinstellung bei der Verwendung von sp_addpublication), wird der Snapshot nur dann generiert, wenn seit dem letzten Ausführen des Snapshot-Agents ein neues Abonnement hinzugefügt wurde. Abonnenten können erst synchronisiert werden, nachdem der Snapshot-Agent abgeschlossen ist.

Der Snapshot-Agent führt die folgenden Schritte aus:

  1. Herstellen einer Verbindung vom Verteiler zum Verleger und gegebenenfalls Einrichten von Sperren für veröffentlichte Tabellen:

    • Bei Mergeveröffentlichungen richtet der Snapshot-Agent keine Sperren ein.

    • Bei Transaktionsveröffentlichungen richtet der Snapshot-Agent standardmäßig Sperren nur während der Anfangsphase der Snapshotgenerierung ein.

    • Bei der Snapshotveröffentlichungen werden die Sperren während der gesamten Snapshotgenerierung aufrechterhalten.

  2. Schreiben einer Kopie des Tabellenschemas für jeden Artikel in eine SCH-Datei. Wenn andere Datenbankobjekte veröffentlicht werden, wie z. B. Indizes, Einschränkungen, gespeicherte Prozeduren, Ansichten, benutzerdefinierte Funktionen usw., werden weitere Skriptdateien generiert.

  3. Kopieren der Daten in der veröffentlichten Tabelle auf dem Verleger und Schreiben der Daten in den Snapshotordner. Der Snapshot wird als ein Satz BCP-Dateien (Bulk Copy Program, Massenkopierprogramm) generiert.

  4. Bei Snapshot- und Transaktionsveröffentlichungen fügt der Snapshot-Agent den Tabellen MSrepl_commands und MSrepl_transactions Zeilen in der Verteilungsdatenbank hinzu. Die Einträge in der MSrepl_commands-Tabelle sind Befehle, die den Speicherort der SCH- und BCP-Dateien, sonstige Snapshotdateien sowie Verweise auf alle Vor- und Nach-Snapshot-Skripts angeben. Die Einträge in der MSrepl_transactions-Tabelle sind Befehle, die sich auf die Synchronisierung des Abonnenten beziehen.

    Bei Mergeveröffentlichungen führt der Snapshot-Agent zusätzliche Schritte aus. Weitere Informationen finden Sie unter Funktionsweise des Initialisierens von Veröffentlichungen und Abonnements durch die Mergereplikation.

  5. Aufheben der Sperren auf veröffentlichten Tabellen.

Während der Snapshotgenerierung können Sie keine Schemaänderungen an den veröffentlichten Tabellen vornehmen. Nach dem Generieren der Snapshotdateien können Sie sie mithilfe von Windows-Explorer im Snapshotordner anzeigen.

Verteilungs-Agent und Merge-Agent

Bei Snapshotveröffentlichungen wird jedes Mal, wenn der Verteilungs-Agent für die Veröffentlichung ausgeführt wird, ein neuer Snapshot auf jeden Abonnenten verschoben, der noch nicht synchronisiert wurde, der für eine erneute Initialisierung markiert ist oder der neue Artikel enthält.

Bei der Snapshot- und der Transaktionsreplikation führt der Verteilungs-Agent die folgenden Schritte aus:

  1. Herstellen einer Verbindung mit dem Verteiler.

  2. Untersuchen der Tabellen MSrepl_commands und MSrepl_transactions in der Verteilungsdatenbank auf dem Verteiler. Der Agent liest den Speicherort der Snapshot-Dateien aus der ersten Tabelle und die Synchronisierungsbefehle des Abonnenten aus beiden Tabellen.

  3. Anwenden des Schemas und der Befehle auf die Abonnementdatenbank.

Bei einer ungefilterten Mergereplikationsveröffentlichung führt der Merge-Agent die folgenden Schritte aus:

  1. Herstellen einer Verbindung mit dem Verteiler.

  2. Überprüfen der sysmergeschemachange-Tabelle auf dem Verleger und Ermitteln, ob ein neuer Snapshot vorhanden ist, der auf dem Abonnenten angewendet werden sollte.

  3. Wenn ein neuer Snapshot verfügbar ist, wendet der Merge-Agent die Snapshotdateien aus dem in sysmergeschemachange angegebenen Speicherort auf die Abonnementdatenbank an.