TransaktionsreplikationTransactional Replication

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL DatabaseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database

Eine Transaktionsreplikation beginnt in der Regel mit einer Momentaufnahme des Veröffentlichungsdatenbankobjekts und der entsprechenden Daten.Transactional replication typically starts with a snapshot of the publication database objects and data. Nach der Erstellung der Anfangsmomentaufnahme werden spätere auf dem Verleger vorgenommene Daten- und Schemaänderungen an den Abonnenten übermittelt, wenn sie auftreten (fast in Echtzeit).As soon as the initial snapshot is taken, subsequent data changes and schema modifications made at the Publisher are usually delivered to the Subscriber as they occur (in near real time). Die Datenänderungen werden auf dem Abonnenten in derselben Reihenfolge und mit denselben Transaktionsgrenzen angewendet, in der sie auf dem Verleger stattgefunden haben. Auf diese Weise wird die Transaktionskonsistenz innerhalb einer Veröffentlichung sichergestellt.The data changes are applied to the Subscriber in the same order and within the same transaction boundaries as they occurred at the Publisher; therefore, within a publication, transactional consistency is guaranteed.

Die Transaktionsreplikation wird typischerweise in reinen Serverumgebungen verwendet und ist für die folgenden Fälle geeignet:Transactional replication is typically used in server-to-server environments and is appropriate in each of the following cases:

  • Inkrementelle Änderungen sollen an Abonnenten weitergegeben werden, wenn sie auftreten.You want incremental changes to be propagated to Subscribers as they occur.

  • Die Anwendung benötigt eine niedrige Latenzzeit zwischen dem Zeitpunkt, zu dem Änderungen auf dem Verleger vorgenommen werden, und dem Zeitpunkt, zu dem die Änderungen auf dem Abonnenten eintreffen.The application requires low latency between the time changes are made at the Publisher and the changes arrive at the Subscriber.

  • Die Anwendung benötigt Zugriff auf Zwischenstufen von Datenänderungen.The application requires access to intermediate data states. Wenn eine Zeile sich z. B. fünfmal ändert, kann die Anwendung bei Verwendung der Transaktionsreplikation auf jede Änderung reagieren (indem sie z. B. einen Trigger auslöst) und nicht nur auf das endgültige Ergebnis aller Zeilenänderungen.For example, if a row changes five times, transactional replication allows an application to respond to each change (such as firing a trigger), not simply the net data change to the row.

  • Auf dem Verleger kommt es sehr häufig zu Einfüge-, Update- und Löschaktivitäten.The Publisher has a very high volume of insert, update, and delete activity.

  • Der Verleger bzw. Abonnent ist keineSQL ServerSQL Server -Datenbank, sondern z. B. eine Oracle-Datenbank.The Publisher or Subscriber is a non-SQL ServerSQL Server database, such as Oracle.

Standardmäßig sollten Abonnenten von Transaktionsreplikationen schreibgeschützt sein, da Änderungen nicht an den Verleger zurückgegeben werden.By default, Subscribers to transactional publications should be treated as read-only, because changes are not propagated back to the Publisher. Die Transaktionsreplikation bietet aber auch Optionen, die Updates auf dem Abonnenten ermöglichen.However, transactional replication does offer options that allow updates at the Subscriber.

Hinweis

Azure SQL Managed Instance kann als Herausgeber, Verleger und Abonnent der Momentaufnahmen- und Transaktionsreplikation fungieren.Azure SQL Managed Instance can be a publisher, distributor, and subscriber for snapshot and transactional replication. Datenbanken in Azure SQL-Datenbank können nun Pushabonnenten der Momentaufnahmen- und Transaktionsreplikation sein.Databases in Azure SQL Database can only be push subscribers for snapshot and transactional replication. Weitere Informationen finden Sie in den Abschnitten zur Transaktionsreplikation unter Replikation zu Azure SQL-Datenbank und Transaktionsreplikation mit Azure SQL Managed Instance (Vorschau).For more information, see Transactional replication with Azure SQL Database and Azure SQL Managed Instance.

Funktionsweise der TransaktionsreplikationHow Transactional Replication Works

Die Transaktionsreplikation wird vom Momentaufnahme-Agent, dem Protokolllese-Agent und dem Verteilungs-Agent von SQL ServerSQL Server implementiert.Transactional replication is implemented by the SQL ServerSQL Server Snapshot Agent, Log Reader Agent, and Distribution Agent. Der Momentaufnahme-Agent bereitet Momentaufnahmen vor, die das Schema und die Daten von veröffentlichten Tabellen und Datenbankobjekten enthalten, speichert die Dateien im Momentaufnahmeordner und zeichnet Synchronisierungsaufträge in der Verteilungsdatenbank auf dem Verteiler auf.The Snapshot Agent prepares snapshot files containing schema and data of published tables and database objects, stores the files in the snapshot folder, and records synchronization jobs in the distribution database on the Distributor.

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.The Log Reader Agent monitors the transaction log of each database configured for transactional replication and copies the transactions marked for replication from the transaction log into the distribution database, which acts as a reliable store-and-forward queue. Der Verteilungs-Agent kopiert die Anfangsmomentaufnahmedateien aus dem Momentaufnahmeordner und die in den Tabellen der Verteilungsdatenbank gespeicherten Transaktionen auf Abonnenten.The Distribution Agent copies the initial snapshot files from the snapshot folder and the transactions held in the distribution database tables to Subscribers.

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.Incremental changes made at the Publisher flow to Subscribers according to the schedule of the Distribution Agent, which can run continuously for minimal latency, or at scheduled intervals. Da die Änderungen an den Daten auf dem Verleger vorgenommen werden müssen (wenn die Transaktionsreplikation ohne sofortiges Update oder verzögertes Update über eine Warteschlange verwendet wird), werden Updatekonflikte vermieden.Because changes to the data must be made at the Publisher (when transactional replication is used without immediate updating or queued updating options), update conflicts are avoided. Letztlich erreichen alle Abonnenten dieselben Werte wie der Verleger.Ultimately, all Subscribers will achieve the same values as the Publisher. Wird das sofortige Update oder verzögerte Update über eine Warteschlange mit der Transaktionsreplikation verwendet, können Updates auf dem Abonnenten vorgenommen werden; beim verzögerten Update über eine Warteschlange können Konflikte auftreten.If immediate updating or queued updating options are used with transactional replication, updates can be made at the Subscriber, and with queued updating, conflicts might occur.

Die folgende Abbildung zeigt die wichtigsten Komponenten der Transaktionsreplikation.The following illustration shows the principal components of transactional replication.

Komponenten und Datenfluss der TransaktionsreplikationTransactional replication components and data flow

AnfangsdatasetInitial Dataset

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.Before a new transactional replication Subscriber can receive incremental changes from a Publisher, the Subscriber must contain tables with the same schema and data as the tables at the Publisher. Das Anfangsdataset ist in der Regel eine Momentaufnahme, die vom Momentaufnahme-Agent erstellt und vom Verteilungs-Agent verteilt und angewendet wird.The initial dataset is typically a snapshot that is created by the Snapshot Agent and distributed and applied by the Distribution Agent. Das Anfangsdataset kann auch über eine Sicherung oder andere Methoden, wie SQL ServerSQL Server Integration Services, bereitgestellt werden.The initial dataset can also be supplied through a backup or other means, such as SQL ServerSQL Server Integration Services.

Wenn Momentaufnahmen an Abonnenten verteilt und auf Abonnenten angewendet werden, sind nur die Abonnenten betroffen, die auf eine Anfangsmomentaufnahme warten.When snapshots are distributed and applied to Subscribers, only those Subscribers waiting for initial snapshots are affected. Andere Abonnenten für diese Veröffentlichung (diejenigen, die bereits initialisiert wurden) sind nicht betroffen.Other Subscribers to that publication (those that have already been initialized) are unaffected.

Gleichzeitige MomentaufnahmeverarbeitungConcurrent Snapshot Processing

Bei der Momentaufnahmegenerierung werden für die Dauer der Momentaufnahmegenerierung freigegebene Sperren auf allen Tabellen platziert, die als Teil der Replikation veröffentlicht werden.Snapshot replication places shared locks on all tables published as part of replication for the duration of snapshot generation. So kann verhindert werden, dass Updates in den veröffentlichten Tabellen ausgeführt werden.This can prevent updates from being made on the publishing tables. Bei der gleichzeitigen Momentaufnahmeverarbeitung, die Standardeinstellung für die Transaktionsreplikation, werden die freigegebenen Sperren nicht während der gesamten Momentaufnahmegenerierung beibehalten. Deshalb können Benutzer ohne Unterbrechung weiter arbeiten, während Anfangsmomentaufnahmedateien durch die Replikation erstellt werden.Concurrent snapshot processing, the default with transactional replication, does not hold the share locks in place during the entire snapshot generation, which allows users to continue working uninterrupted while replication creates initial snapshot files.

Momentaufnahme-AgentSnapshot Agent

Die Prozeduren, mit denen der Momentaufnahme-Agent die Anfangsmomentaufnahme in der Transaktionsreplikation implementiert, sind identisch mit den bei der Momentaufnahmereplikation verwendeten Prozeduren (ausgenommen der für die gleichzeitige Momentaufnahmeverarbeitung weiter oben beschriebenen Prozeduren).The procedures by which the Snapshot Agent implements the initial snapshot in transactional replication are the same procedures used in snapshot replication (except as outlined above with regard to concurrent snapshot processing).

Nach dem Generieren der Momentaufnahmedateien können Sie sie mithilfe von MicrosoftMicrosoft Windows-Explorer im Momentaufnahmeordner anzeigen.After the snapshot files have been generated, you can view them in the snapshot folder using MicrosoftMicrosoft Windows Explorer.

Ändern von Daten und der Protokolllese-AgentModifying Data and the Log Reader 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.The Log Reader Agent runs at the Distributor; it typically runs continuously, but can also run according to a schedule you establish. 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 der SQL ServerSQL Server-Datenbank-Engine verwendet wird) und identifiziert alle INSERT-, UPDATE- und DELETE-Anweisungen und andere Änderungen, die an den für die Replikation markierten Daten vorgenommen wurden.When executing, the Log Reader Agent first reads the publication transaction log (the same database log used for transaction tracking and recovery during regular SQL ServerSQL Server Database Engine operations) and identifies any INSERT, UPDATE, and DELETE statements, or other modifications made to the data in transactions that have been marked for replication. Danach kopiert der Agent diese Transaktionen als Batch in die Verteilungsdatenbank auf dem Verteiler.Next, the agent copies those transactions in batches to the distribution database at the Distributor. 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.The Log Reader Agent uses the internal stored procedure sp_replcmds to get the next set of commands marked for replication from the log. Die Verteilungsdatenbank wird dann zur Warteschlange zum Speichern und Weiterleiten, von der aus Änderungen an die Abonnenten gesendet werden.The distribution database then becomes the store-and-forward queue from which changes are sent to Subscribers. Nur Transaktionen, für die ein Commit ausgeführt wurde, werden an die Verteilungsdatenbank gesendet.Only committed transactions are sent to the distribution database.

Nachdem der gesamte Transaktionsbatch erfolgreich in die Verteilungsdatenbank geschrieben wurde, wird ein Commit ausgeführt.After the entire batch of transactions has been written successfully to the distribution database, it is committed. 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.Following the commit of each batch of commands to the Distributor, the Log Reader Agent calls sp_repldone to mark where replication was last completed. Schließlich markiert der Agent die Zeilen im Transaktionsprotokoll, die gelöscht werden können.Finally, the agent marks the rows in the transaction log that are ready to be purged. Zeilen, die noch auf ihre Replikation warten, werden nicht gelöscht.Rows still waiting to be replicated are not purged.

Transaktionsbefehle werden in der Verteilungsdatenbank gespeichert, bis sie an alle Abonnenten weitergegeben werden oder bis die maximale Beibehaltungsdauer für die Verteilung überschritten wird.Transaction commands are stored in the distribution database until they are propagated to all Subscribers or until the maximum distribution retention period has been reached. Abonnenten erhalten Transaktionen in der gleichen Reihenfolge, in der sie auf den Verleger angewendet wurden.Subscribers receive transactions in the same order in which they were applied at the Publisher.

Verteilungs-AgentDistribution Agent

Der Verteilungs-Agent wird für Pushabonnements auf dem Verteiler und für Pullabonnements auf dem Abonnenten ausgeführt.The Distribution Agent runs at the Distributor for push subscriptions and at the Subscriber for pull subscriptions. Der Agent verschiebt Transaktionen aus der Verteilungsdatenbank auf den Abonnenten.The agent moves transactions from the distribution database to the Subscriber. 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.If a subscription is marked for validation, the Distribution Agent also checks whether data at the Publisher and Subscriber match.

VeröffentlichungstypenPublication types

Die Transaktionsreplikation stellt vier Veröffentlichungstypen bereit:Transactional replication offers four publication types:

VeröffentlichungstypPublication Type BESCHREIBUNGDescription
Standardmäßige TransaktionsveröffentlichungStandard transactional publication Geeignet für Topologien, in denen alle Daten auf dem Abonnenten schreibgeschützt sind (von der Transaktionsreplikation wird dies auf dem Abonnenten nicht erzwungen).Appropriate for topologies in which all data at the Subscriber is read-only (transactional replication does not enforce this at the Subscriber).

Diese Transaktionsveröffentlichungen werden standardmäßig bei der Verwendung von Transact-SQL oder Replikationsverwaltungsobjekten (RMO) erstellt.Standard transactional publications are created by default when using Transact-SQL or Replication Management Objects (RMO). Im Assistenten für neue Veröffentlichung werden sie erstellt, wenn auf der Seite Veröffentlichungstyp die Option Transaktionsveröffentlichung ausgewählt wird.When using the New Publication Wizard, they are created by selecting Transactional publication on the Publication Type page.

Weitere Informationen zum Erstellen von Veröffentlichungen finden Sie unter Veröffentlichen von Daten und Datenbankobjekten.For more information about creating publications, see Publish Data and Database Objects.
Transaktionsveröffentlichung mit aktualisierbaren AbonnementsTransactional publication with updatable subscriptions Dieser Veröffentlichungstyp weist die folgenden Merkmale auf:The characteristics of this publication type are:

– Jeder Speicherort verfügt über identische Daten auf einem Verleger und einem Abonnenten.-Each location has identical data, with one Publisher and one Subscriber.
– Zeilen können auf dem Abonnenten aktualisiert werden.-It is possible to update rows at the Subscriber
– Diese Topologie eignet sich für Serverumgebungen am besten, die Hochverfügbarkeit und Leseskalierbarkeit erfordern.-This topology is best suited for server environments requiring high availability and read scalability.

Weitere Informationen finden Sie unter Aktualisierbare Abonnements.For more information, see Updatable Subscriptions.
Peer-zu-Peer-TopologiePeer-to-peer topology Dieser Veröffentlichungstyp weist die folgenden Merkmale auf:The characteristics of this publication type are:
– Jeder Speicherort verfügt über identische Daten und wird gleichzeitig als Verleger und Abonnent genutzt.- Each location has identical data and acts as both a Publisher and Subscriber.
– Dieselbe Zeile kann nur jeweils an einem Speicherort geändert werden.- The same row can be changed only at one location at a time.
– Die Konflikterkennung wird unterstützt.- Supports conflict detection
– Diese Topologie eignet sich am besten für Serverumgebungen, die Hochverfügbarkeit und Leseskalierbarkeit erfordern.- This topology is best suited for server environments requiring high availability and read scalability.

Weitere Informationen finden Sie unter Peer-to-Peer Transactional Replication.For more information, see Peer-to-Peer Transactional Replication.
Bidirektionale TransaktionsreplikationBidirectional transactional replication Dieser Veröffentlichungstyp weist die folgenden Merkmale auf:The characteristics of this publication type are:
Die bidirektionale Replikation ähnelt der Peer-zu-Peer-Replikation, stellt jedoch keine Konfliktauflösung bereit.Bidirectional replication is similar to Peer-to-Peer replication, however, it does not provide conflict resolution. Darüber hinaus ist die bidirektionale Replikation auf zwei Server beschränkt.Additionally, bidirectional replication is limited to 2 servers.

Weitere Informationen finden Sie unter Bidirektionale Transaktionsreplikation.For more information, see Bidirectional Transactional Replication