Funktionsweise der Transaktionsreplikation

Die Transaktionsreplikation wird vom SQL Server Snapshot-Agent, dem Protokolllese-Agent und dem Verteilungs-Agent implementiert. 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 Synchronisierungsaufträge in der Verteilungsdatenbank auf dem Verteiler auf.

Der Protokolllese-Agent überwacht das Transaktionsprotokoll jeder für die Transaktionsreplikation konfigurierten Datenbank und kopiert die für die Replikation markierten Transaktionen aus dem Transaktionsprotokoll in die Verteilungsdatenbank, die als zuverlässige Warteschlange zum Speichern und Weiterleiten fungiert. Der Verteilungs-Agent kopiert die Anfangssnapshotdateien aus dem Snapshotordner und die in den Tabellen der Verteilungsdatenbank gespeicherten Transaktionen auf Abonnenten.

Auf dem Verleger vorgenommene inkrementelle Änderungen laufen gemäß dem Zeitplan des Verteilungs-Agents ab, der fortlaufend (minimale Latenzzeit) oder in geplanten Intervallen ausgeführt werden kann. Da die Änderungen an den Daten auf dem Verleger vorgenommen werden müssen (wenn die Transaktionsreplikation ohne sofortige Aktualisierung oder verzögerte Aktualisierung über eine Warteschlange verwendet wird), werden Aktualisierungskonflikte vermieden. Letztlich erreichen alle Abonnenten dieselben Werte wie der Verleger. Wird die sofortige Aktualisierung oder verzögerte Aktualisierung über eine Warteschlange mit der Transaktionsreplikation verwendet, können Aktualisierungen auf dem Abonnenten vorgenommen werden; bei der verzögerten Aktualisierung über eine Warteschlange können Konflikte auftreten. Weitere Informationen finden Sie unter Funktionsweise von aktualisierbaren Abonnements.

Die folgende Abbildung zeigt die wichtigsten Komponenten der Transaktionsreplikation.

Komponenten und Datenfluss für Transaktionsreplikation

Anfangsdataset

Bevor ein neuer Abonnent einer Transaktionsreplikation inkrementelle Änderungen von einem Verleger erhalten kann, muss der Abonnent Tabellen mit demselben Schema und denselben Daten wie die Tabellen auf dem Verleger enthalten. Das Anfangsdataset ist in der Regel ein Snapshot, der vom Snapshot-Agent erstellt und vom Verteilungs-Agent verteilt und angewendet wird. Das Anfangsdataset kann auch über eine Sicherung oder andere Methoden, wie SQL Server Integration Services, bereitgestellt werden. Weitere Informationen finden Sie unter Initialisieren eines Abonnements.

Wenn Snapshots an Abonnenten verteilt und auf Abonnenten angewendet werden, sind nur die Abonnenten betroffen, die auf einen Anfangssnapshot warten. Andere Abonnenten für diese Veröffentlichung (diejenigen, die bereits initialisiert wurden) sind nicht betroffen.

Gleichzeitige Snapshotverarbeitung

Bei der Snapshotgenerierung werden für die Dauer der Snapshotgenerierung freigegebene Sperren auf allen Tabellen platziert, die als Teil der Replikation veröffentlicht werden. So kann verhindert werden, dass Updates in den veröffentlichten Tabellen ausgeführt werden. Bei der gleichzeitigen Snapshotverarbeitung, die Standardeinstellung für die Transaktionsreplikation, werden die freigegebenen Sperren nicht während der gesamten Snapshotgenerierung beibehalten. Deshalb können Benutzer ohne Unterbrechung weiter arbeiten, während Anfangssnapshotdateien durch die Replikation erstellt werden.

Snapshot-Agent

Die Prozeduren, mit denen der Snapshot-Agent den Anfangssnapshot in der Transaktionsreplikation implementiert, sind identisch mit den bei der Snapshotreplikation verwendeten Prozeduren (ausgenommen der für die gleichzeitige Snapshotverarbeitung weiter oben beschriebenen Prozeduren). Weitere Informationen finden Sie unter Funktionsweise der Snapshotreplikation.

Nach dem Generieren der Snapshotdateien können Sie sie mithilfe von Microsoft Windows-Explorer im Snapshotordner anzeigen.

Ändern von Daten und der Protokolllese-Agent

Der Protokolllese-Agent wird auf dem Verteiler ausgeführt. In der Regel wird er fortlaufend ausgeführt, Sie können jedoch auch einen Zeitplan für die Ausführung festlegen. Beim Ausführen liest der Protokolllese-Agent zunächst das Transaktionsprotokoll der Veröffentlichung (dasselbe Datenbankprotokoll, das auch für die Transaktionsprotokollierung und -wiederherstellung während regulärer Vorgänge des SQL Server-Datenbankmoduls verwendet wird) und identifiziert alle INSERT-, UPDATE- und DELETE-Anweisungen und andere Änderungen, die an den für die Replikation markierten Daten vorgenommen wurden. Danach kopiert der Agent diese Transaktionen als Batch in die Verteilungsdatenbank auf dem Verteiler. Der Protokolllese-Agent verwendet die intern gespeicherte Prozedur sp_replcmds zum Abrufen des nächsten Satzes von Befehlen aus dem Protokoll, die für die Replikation markiert wurden. Die Verteilungsdatenbank wird dann zur Warteschlange zum Speichern und Weiterleiten, von der aus Änderungen an die Abonnenten gesendet werden. Nur Transaktionen, für die ein Commit ausgeführt wurde, werden an die Verteilungsdatenbank gesendet.

Nachdem der gesamte Transaktionsbatch erfolgreich in die Verteilungsdatenbank geschrieben wurde, wird ein Commit ausgeführt. Nach der Ausführung eines Commits für jeden Batch von Befehlen auf dem Verteiler ruft der Protokolllese-Agent sp_repldone auf, um zu markieren, wo die Replikation zuletzt abgeschlossen wurde. Schließlich markiert der Agent die Zeilen im Transaktionsprotokoll, die gelöscht werden können. Zeilen, die noch auf ihre Replikation warten, werden nicht gelöscht.

Transaktionsbefehle werden in der Verteilungsdatenbank gespeichert, bis sie an alle Abonnenten weitergegeben werden oder bis die maximale Beibehaltungsdauer für die Verteilung überschritten wird. Abonnenten erhalten Transaktionen in der gleichen Reihenfolge, in der sie auf den Verleger angewendet wurden.

Verteilungs-Agent

Der Verteilungs-Agent wird auf dem Verteiler für Pushabonnements und auf dem Abonnenten für Pullabonnements ausgeführt. Der Agent verschiebt Transaktionen aus der Verteilungsdatenbank auf den Abonnenten. Wenn ein Abonnement für die Überprüfung markiert ist, überprüft der Verteilungs-Agent auch, ob die Daten auf dem Verleger und dem Abonnenten übereinstimmen. Weitere Informationen finden Sie unter Überprüfen von replizierten Daten.