Aktualisierbare Abonnements für die Transaktionsreplikation
Aktualisiert: 14. April 2006
Die Transaktionsreplikation unterstützt Aktualisierungen auf den Abonnenten über aktualisierbare Abonnements und Peer-to-Peer-Replikation. Es gibt zwei Arten von aktualisierbaren Abonnements:
- Sofortiges Aktualisieren. Verleger und Abonnent müssen verbunden sein, damit Daten auf dem Abonnenten aktualisiert werden können.
- Verzögertes Aktualisieren über eine Warteschlange. Verleger und Abonnent müssen nicht verbunden sein, damit Daten auf dem Abonnenten aktualisiert werden können. Aktualisierungen können ausgeführt werden, während der Verleger oder der Abonnent offline ist.
Wenn Daten auf einem Abonnenten aktualisiert werden, werden sie zuerst an den Verleger und dann an andere Abonnenten weitergegeben. Beim sofortigen Aktualisieren werden die Änderungen sofort mithilfe des Zweiphasencommit-Protokolls weitergegeben. Beim verzögerten Aktualisieren über eine Warteschlange werden die Änderungen in einer Warteschlange gespeichert und dann immer, wenn eine Netzwerkverbindung befügbar ist, asynchron auf dem Verleger angewendet. Da die Aktualisierungen asynchron an den Verleger weitergegeben werden, wurden die gleichen Daten möglicherweise vom Verleger oder von einem anderen Abonnenten aktualisiert. Daher können Konflikte auftreten, wenn die Aktualisierungen angewendet werden. Konflikte werden nach einer Vorgehensweise zur Konfliktlösung erkannt und gelöst, die beim Erstellen der Publikation festgelegt wird.
Wenn Sie im Assistenten für neue Publikation eine Transaktionspublikation mit aktualisierbaren Abonnements erstellen, werden sowohl das sofortige Aktualisieren als auch das verzögerte Aktualisieren über eine Warteschlange aktiviert. Beim Erstellen einer Publikation mit gespeicherten Prozeduren können Sie eine oder beide Optionen aktivieren. Wenn Sie ein Abonnement für die Publikation erstellen, geben Sie an, welcher Aktualisierungsmodus verwendet wird. Sie können dann gegebenenfalls den Aktualisierungsmodus wechseln. Weitere Informationen finden Sie im folgenden Abschnitt zum Wechseln des Aktualisierungsmodus.
So aktivieren Sie aktualisierbare Abonnements für Transaktionspublikationen
- SQL Server Management Studio: Vorgehensweise: Aktivieren von aktualisierbaren Abonnements für Transaktionspublikationen (SQL Server Management Studio)
- Replikationsprogrammierung mit Transact-SQL: How to: Enable Updating Subscriptions for Transactional Publications (Replication Transact-SQL Programming)
So erstellen Sie aktualisierbare Abonnements für Transaktionspublikationen
- SQL Server Management Studio: Vorgehensweise: Erstellen eines aktualisierbaren Abonnements für eine Transaktionspublikation (SQL Server Management Studio)
- Replikationsprogrammierung mit Transact-SQL: How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming)
Wechseln des Aktualisierungsmodus
Bei der Verwendung aktualisierbarer Abonnements können Sie den Aktualisierungsmodus für ein Abonnement angeben und dann bei Bedarf in den anderen Modus wechseln. Sie können z. B. angeben, dass das sofortige Aktualisieren für ein Abonnement verwendet wird. Wenn dann jedoch die Netzwerkverbindung aufgrund eines Systemfehlers unterbrochen wird, können Sie auf das verzögerte Aktualisieren über eine Warteschlange wechseln.
Hinweis: |
---|
Bei der Replikation erfolgt kein automatischer Wechsel zwischen den Aktualisierungsmodi. Sie müssen den Aktualisierungsmodus über SQL Server Management Studio festlegen, oder die Anwendung muss für einen Moduswechsel sp_setreplfailovermode (Transact-SQL) aufrufen. |
Wenn Sie vom sofortigen Aktualisieren zum verzögerten Aktualisieren über eine Warteschlange wechseln, können Sie erst wieder zum sofortigen Aktualisieren wechseln, wenn der Abonnent und der Verleger verbunden sind und der Warteschlangenlese-Agent alle ausstehenden Nachrichten in der Warteschlange auf den Verleger angewendet hat.
So wechseln Sie den Aktualisierungsmodus
Zum Wechseln des Aktualisierungsmodus müssen Sie die Publikation und das Abonnement für beide Modi aktivieren und zwischen beiden nach Bedarf wechseln.
- SQL Server Management Studio: Vorgehensweise: Wechseln des Aktualisierungsmodus für ein aktualisierbares Transaktionsabonnement (SQL Server Management Studio)
- Replikationsprogrammierung mit Transact-SQL: How to: Switch Between Updating Modes for an Updating Transactional Subscription (Replication Transact-SQL Programming)
Überlegungen zur Verwendung von aktualisierbaren Abonnements
Allgemeine Überlegungen
- Das Aktualisieren von Abonnements wird bei Abonnenten unterstützt, auf denen Microsoft SQL Server 2000 SP3 oder höher ausgeführt wird. Wenn Sie sofort aktualisierbare Abonnements auf einem Abonnenten verwendet haben, auf dem SQL Server, Version 7.0, ausgeführt wird, und Sie auf SQL Server 2005 aktualisieren, müssen Sie die Abonnements löschen und neu erstellen.
- Nachdem eine Publikation für sofort aktualisierbare Abonnements oder Abonnements mit verzögertem Aktualisieren über eine Warteschlange aktiviert wurde, kann die Option nicht für die Publikation deaktiviert werden (obwohl die Abonnements sie nicht verwenden müssen). Zum Deaktivieren der Option muss die Publikation gelöscht und dann eine neue Publikation erstellt werden.
- Das erneute Veröffentlichen von Daten wird nicht unterstützt.
- Bei der Replikation wird die msrepl_tran_version-Spalte veröffentlichten Tabellen für das Nachverfolgen hinzugefügt. Wegen dieser zusätzlichen Spalte sollten alle INSERT-Anweisungen eine Spaltenliste enthalten.
- Wenn Sie das Schema einer Tabelle in einer Publikation ändern möchten, die das Aktualisieren von Abonnements unterstützt, müssen alle Aktivitäten an der Tabelle auf dem Verleger und dem Abonnenten angehalten werden. Außerdem müssen ausstehende Datenänderungen vor einer Schemaänderung an alle Knoten weitergegeben werden. Dadurch wird sichergestellt, dass unbeendete Transaktionen keinen Konflikt mit der ausstehenden Schemaänderung auslösen. Nach der Weitergabe der Schemaänderungen an alle Knoten können die Aktivitäten an den veröffentlichten Tabellen fortgesetzt werden. Weitere Informationen finden Sie unter How to: Quiesce a Replication Topology (Replication Transact-SQL Programming).
- Wenn Sie den Aktualisierungsmodus wechseln möchten, muss der Warteschlangenlese-Agent nach der Initialisierung des Abonnements mindestens einmal ausgeführt werden (standardmäßig wird der Warteschlangenlese-Agent fortlaufend ausgeführt).
- Ist die Abonnentendatenbank horizontal partitioniert und die Partition enthält Zeilen, die auf dem Abonnenten, aber nicht auf dem Verleger vorhanden sind, kann der Abonnent die bereits vorhandenen Zeilen nicht aktualisieren. Bei dem Versuch, diese Zeilen zu aktualisieren, wird ein Fehler zurückgegeben. Die Zeilen sollten aus der Tabelle gelöscht und dann auf dem Verleger hinzugefügt werden.
Aktualisierungen auf dem Abonnenten
- Aktualisierungen auf dem Abonnenten werden auch dann an den Verleger weitergegeben, wenn ein Abonnement abgelaufen oder inaktiv ist. Stellen Sie sicher, dass Abonnements dieser Art gelöscht oder erneut initialisiert werden.
- Wenn die Spalten TIMESTAMP oder IDENTITY verwendet und als Basisdatentypen repliziert werden, sollten die Werte in diesen Spalten nicht auf dem Abonnenten aktualisiert werden.
- Abonnenten können keine text-, ntext- oder image-Werte aktualisieren oder einfügen, da das Lesen eingefügter oder gelöschter Tabellen innerhalb der Änderungsprotokollierungstrigger der Replikation nicht möglich ist. Ebenso können Abonnenten keine text- oder image-Werte mithilfe von WRITETEXT oder UPDATETEXT aktualisieren oder einfügen, da die Daten vom Verleger überschrieben werden. Stattdessen können Sie die text- und image-Spalten in eine separate Tabelle partitionieren und die beiden Tabellen in einer Transaktion ändern.
Verwenden Sie zum Aktualisieren großer Objekte auf einem Abonnenten die Datentypen varchar(max), nvarchar(max) und varbinary(max) anstelle der jeweiligen Datentypen text, ntext und image. - Aktualisierungen an eindeutigen Schlüsseln (einschließlich Primärschlüssel), die Duplikate generieren (z. B. eine Aktualisierung der Form UPDATE <column> SET <column> =<column>+1), sind nicht zulässig und werden aufgrund eines Verstoßes gegen die Eindeutigkeit abgelehnt. Dies ist darin begründet, dass Aktualisierungen von Zeilengruppen auf dem Abonnenten durch die Replikation als einzelne UPDATE-Anweisungen für jede betroffene Zeile weitergegeben werden.
- Ist die Abonnentendatenbank horizontal partitioniert und die Partition enthält Zeilen, die auf dem Abonnenten, aber nicht auf dem Verleger vorhanden sind, kann der Abonnent die bereits vorhandenen Zeilen nicht aktualisieren. Bei dem Versuch, diese Zeilen zu aktualisieren, wird ein Fehler zurückgegeben. Die Zeilen sollten aus der Tabelle gelöscht und erneut eingefügt werden.
Benutzerdefinierte Trigger
- Wenn die Anwendung Trigger auf dem Abonnenten erfordert, definieren Sie die Trigger mithilfe der Option NOT FOR REPLICATION auf dem Verleger und dem Abonnenten. Weitere Informationen zu dieser Option finden Sie unter Steuern von Einschränkungen, Identitäten und Triggern mithilfe von NOT FOR REPLICATION. Dadurch wird sichergestellt, dass Trigger nur für die ursprüngliche Datenänderung und nicht bei der Replikation dieser Änderung ausgelöst werden.
- Stellen Sie sicher, dass der benutzerdefinierte Trigger nicht ausgelöst wird, wenn der Replikationstrigger die Tabelle aktualisiert. Dies wird erreicht, indem die sp_check_for_sync_trigger-Prozedur im Rumpf des benutzerdefinierten Triggers aufgerufen wird. Weitere Informationen finden Sie unter sp_check_for_sync_trigger (Transact-SQL).
Sofortiges Aktualisieren
- Für sofort aktualisierbare Abonnements werden Änderungen auf dem Abonnenten an den Verleger weitergegeben und mithilfe von MS DTC (Microsoft Distributed Transaction Coordinator) angewendet. Stellen Sie sicher, dass MS DTC auf dem Verleger und Abonnenten installiert und konfiguriert ist. Weitere Informationen finden Sie in der Windows-Dokumentation.
- Die Trigger, die für sofort aktualisierbare Abonnements verwendet werden, erfordern eine Verbindung mit dem Verleger, damit Änderungen repliziert werden können. Informationen zum Sichern dieser Verbindung finden Sie unter Sicherheitsüberlegungen für Abonnements mit Aktualisierung.
- Wenn die Publikation sofort aktualisierbare Abonnements zulässt und ein Artikel in der Publikation einen Spaltenfilter aufweist, können Sie Spalten ungleich NULL ohne Standardwerte nicht herausfiltern.
Verzögertes Aktualisieren über eine Warteschlange
- In einer Mergepublikation eingeschlossene Tabellen können nicht als Teil einer Transaktionspublikation veröffentlicht werden, die Abonnements mit verzögerter Aktualisierung über eine Warteschlange zulässt.
- Aktualisierungen an Primärschlüsselspalten werden beim Verwenden des verzögerten Aktualisierens über eine Warteschlange nicht empfohlen, da der Primärschlüssel verwendet wird, um Datensätze für alle Abfragen zu suchen. Wenn die Vorgehensweise zur Konfliktlösung so festgelegt ist, dass der Abonnent gewinnt, sollten Aktualisierungen an Primärschlüsseln mit Vorsicht vorgenommen werden. Wenn Aktualisierungen am Primärschlüssel auf dem Verleger und dem Abonnenten vorgenommen werden, handelt es sich beim Ergebnis um zwei Zeilen mit unterschiedlichen Primärschlüsseln.
- Für Spalten des SQL_VARIANT-Datentyps: Daten werden beim Einfügen oder Aktualisieren auf dem Abonnenten vom Warteschlangenlese-Agent auf die folgende Weise zugeordnet, wenn sie vom Abonnenten in die Warteschlange kopiert werden:
- BIGINT, DECIMAL, NUMERIC, MONEY und SMALLMONEY werden NUMERIC zugeordnet.
- BINARY und VARBINARY werden VARBINARY-Daten zugeordnet.
Konflikterkennung und -lösung
- Für die Konfliktlösungsrichtlinie Abonnent gewinnt gilt: Die Konfliktlösung wird bei Aktualisierungen an Primärschlüsselspalten nicht unterstützt.
- Konflikte aufgrund von Fehlern der FOREIGN KEY-Einschränkung werden durch die Replikation nicht aufgelöst:
- Wenn Konflikte nicht zu erwarten und die Daten optimal partitioniert sind (Abonnenten aktualisieren nicht dieselben Zeilen), können Sie FOREIGN KEY-Einschränkungen auf dem Verleger und den Abonnenten verwenden.
- Wenn Konflikte zu erwarten sind, gehen Sie folgendermaßen vor: Verwenden Sie keine FOREIGN KEY-Einschränkungen auf dem Verleger oder dem Abonnenten, wenn Sie die Konfliktlösung "Abonnent gewinnt" verwenden; verwenden Sie keine FOREIGN KEY-Einschränkungen auf dem Abonnenten, wenn Sie die Konfliktlösung "Verleger gewinnt" verwenden.
Siehe auch
Konzepte
Konflikterkennung und -lösung beim verzögerten Aktualisieren über eine Warteschlange
Peer-to-Peer-Transaktionsreplikation
Publikationstypen der Transaktionsreplikation
Veröffentlichen von Daten und Datenbankobjekten
Sicherheitsüberlegungen für Abonnements mit Aktualisierung
Abonnieren von Publikationen