Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2008 (und höher)
Hinweis
Dieses Feature wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieses Features in neuer Entwicklungsarbeit, und planen Sie, Anwendungen zu ändern, die derzeit dieses Feature verwenden.
In SQL Server 2014 unterstützt die Transaktionsreplikation Updates bei Abonnenten über aktualisierbare Subskriptionen und Peer-to-Peer-Replikation. Im Folgenden sind die beiden Arten von aktualisierbaren Abonnements aufgeführt:
Sofortige Aktualisierung. Der Publisher und der Abonnent müssen verbunden sein, um die Daten beim Abonnenten zu aktualisieren.
Das Aktualisieren wird in die Warteschlange gestellt, sodass Publisher und Abonnent nicht verbunden sein müssen, um die Daten beim Abonnenten zu aktualisieren. Updates können vorgenommen werden, während der Abonnent oder Publisher offline ist.
Wenn Daten bei einem Abonnenten aktualisiert werden, wird sie zuerst an den Herausgeber weitergegeben und dann an andere Abonnenten weitergegeben. Wenn die sofortige Aktualisierung verwendet wird, werden die Änderungen sofort mithilfe des zweistufigen Commitprotokolls weitergegeben. Wenn die Aktualisierung in der Warteschlange verwendet wird, werden die Änderungen in einer Warteschlange gespeichert. Die in die Warteschlange eingereihten Transaktionen werden dann asynchron beim Publisher angewendet, jeweils wenn Netzwerkkonnektivität verfügbar ist. Da die Updates asynchron an den Publisher weitergegeben werden, können dieselben Daten möglicherweise vom Publisher oder von einem anderen Abonnenten aktualisiert und Konflikte auftreten, wenn die Updates angewendet werden. Konflikte werden gemäß einer Beim Erstellen der Publikation festgelegten Konfliktlösungsrichtlinie erkannt und aufgelöst.
Wenn Sie eine transaktionsfähige Publikation mit aktualisierbaren Abonnements im Assistenten für neue Publikation erstellen, werden sowohl die sofortige Aktualisierung als auch die Warteschlange für die Aktualisierung aktiviert. Wenn Sie eine Publikation mit gespeicherten Prozeduren erstellen, können Sie eine oder beide Optionen aktivieren. Wenn Sie ein Abonnement für die Publikation erstellen, geben Sie an, welcher Updatemodus verwendet werden soll. Sie können dann bei Bedarf zwischen den Updatemodi wechseln. Weitere Informationen finden Sie im folgenden Abschnitt "Wechseln zwischen Updatemodi".
So aktivieren Sie aktualisierbare Abonnements für Transaktionspublikationen, aktivieren Sie das Aktualisieren von Abonnements für Transaktionspublikationen
Informationen zum Erstellen aktualisierbarer Abonnements für Transaktionspublikationen finden Sie unter Erstellen eines aktualisierbaren Abonnements für eine Transaktionspublikation
Wechseln zwischen Updatemodi
Wenn Sie aktualisierbare Abonnements verwenden, können Sie angeben, dass ein Abonnement einen Updatemodus verwenden soll, und dann zu der anderen wechseln, wenn die Anwendung sie benötigt. Sie können zum Beispiel angeben, dass ein Abonnement die sofortige Aktualisierung verwenden soll, aber bei einem Systemfehler auf die Aktualisierung in der Warteschlange umschalten, wenn dies zu einem Verlust der Netzwerkkonnektivität führt.
Hinweis
Die Replikation wechselt nicht automatisch zwischen Updatemodi. Sie müssen den Updatemodus über SQL Server Management Studio festlegen, oder Ihre Anwendung muss sp_setreplfailovermode (Transact-SQL) aufrufen, um zwischen den Modi zu wechseln.
Wenn Sie von der direkten Aktualisierung auf die Aktualisierung in der Warteschlange wechseln, können Sie nicht zurück zur direkten Aktualisierung wechseln, bis der Abonnent und der Publisher verbunden sind und der Queue Reader Agent alle ausstehenden Nachrichten in der Warteschlange auf dem Publisher zum Einsatz gebracht hat.
So wechseln Sie zwischen Updatemodi
Um zwischen den Aktualisierungsmodi zu wechseln, müssen Sie die Publikation und das Abonnement für beide Updatemodi aktivieren und bei Bedarf zwischen diesen wechseln. Weitere Informationen finden Sie unter
Wechseln zwischen Updatemodi für ein aktualisierbares Transaktionsabonnement.
Überlegungen zur Verwendung aktualisierbarer Abonnements
Nachdem eine Publikation zum Aktualisieren von Abonnements oder in die Warteschlange eingereihten Aktualisierungsabonnements aktiviert wurde, kann die Option für die Publikation nicht deaktiviert werden (obwohl Abonnements sie nicht verwenden müssen). Um die Option zu deaktivieren, muss die Publikation gelöscht und eine neue erstellt werden.
Das erneute Veröffentlichen von Daten wird nicht unterstützt.
Replikation fügt die Spalte msrepl_tran_version zu veröffentlichten Tabellen für Nachverfolgungszwecke hinzu. Aufgrund dieser zusätzlichen Spalte sollten alle
INSERTAnweisungen eine Spaltenliste enthalten.Um Schemaänderungen an einer Tabelle in einer Publikation vorzunehmen, die das Aktualisieren von Abonnements unterstützt, müssen alle Aktivitäten auf der Tabelle beim Verleger und bei den Abonnenten angehalten werden, und ausstehende Datenänderungen müssen an alle Knoten weitergegeben werden, bevor Schemaänderungen vorgenommen werden. Dadurch wird sichergestellt, dass ausstehende Transaktionen nicht mit der ausstehenden Schemaänderung in Konflikt stehen. Nachdem die Schemaänderungen an alle Knoten weitergegeben wurden, kann die Aktivität in den veröffentlichten Tabellen fortgesetzt werden. Weitere Informationen finden Sie unter Versetzen einer Replikationstopologie in einen inaktiven Status (Replikationsprogrammierung mit Transact-SQL).
Wenn Sie beabsichtigen, zwischen den Update-Modi zu wechseln, muss der Warteschlangenleser-Agent mindestens einmal ausgeführt werden, nach der Initialisierung des Abonnements (standardmäßig wird der Warteschlangenleser-Agent kontinuierlich ausgeführt).
Wenn die Abonnentendatenbank horizontal partitioniert wird und zeilen in der Partition vorhanden sind, die im Abonnenten vorhanden sind, aber nicht im Publisher, kann der Abonnent die vorhandenen Zeilen nicht aktualisieren. Beim Versuch, diese Zeilen zu aktualisieren, wird ein Fehler zurückgegeben. Die Zeilen sollten aus der Tabelle gelöscht und dann im Publisher hinzugefügt werden.
Updates beim Abonnenten
Updates am Abonnenten werden an den Herausgeber weitergegeben, auch wenn ein Abonnement abgelaufen ist oder inaktiv ist. Stellen Sie sicher, dass solche Abonnements entweder verworfen oder erneut initialisiert werden.
Wenn
TIMESTAMPoderIDENTITYSpalten verwendet werden und sie als Basisdatentypen repliziert werden, sollten die Werte in diesen Spalten nicht beim Abonnenten aktualisiert werden.Abonnenten können weder
text,ntextnochimageWerte aktualisieren oder einfügen, da es nicht möglich ist, aus den eingefügten oder gelöschten Tabellen innerhalb der Replikationsänderungsnachverfolgungstrigger zu lesen. Ebenso können Abonnenten keinetext- oderimage-Werte mitWRITETEXToderUPDATETEXTaktualisieren oder einfügen, da die Daten vom Publisher überschrieben werden. Stattdessen könnten Sie die Spaltentextundimagein eine separate Tabelle partitionieren und die beiden Tabellen innerhalb einer Transaktion modifizieren.Um große Objekte bei einem Abonnenten zu aktualisieren, verwenden Sie die Datentypen
varchar(max),nvarchar(max)undvarbinary(max)anstelle vontext,ntextundimageDatentypen.Aktualisierungen von eindeutigen Schlüsseln (einschließlich Primärschlüsseln), die Duplikate generieren (z. B. eine Aktualisierung des Formulars
UPDATE <column> SET <column> =<column>+1ist nicht zulässig und wird aufgrund einer Eindeutigkeitsverletzung abgelehnt. Dies liegt daran, dass festgelegte Aktualisierungen, die am Abonnenten vorgenommen werden, von der Replikation als einzelneUPDATEAnweisungen für jede betroffene Zeile weitergegeben werden.Wenn die Abonnentendatenbank horizontal partitioniert wird und zeilen in der Partition vorhanden sind, die im Abonnenten vorhanden sind, aber nicht im Publisher, kann der Abonnenten die bereits vorhandenen Zeilen nicht aktualisieren. Beim 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 beim Abonnenten erfordert, sollten die Trigger sowohl beim Publisher als auch beim Abonnenten mit der
NOT FOR REPLICATIONOption definiert werden. Dadurch wird sichergestellt, dass Trigger nur bei der ursprünglichen Datenänderung aktiviert werden, jedoch nicht, wenn diese Änderung repliziert wird.Stellen Sie sicher, dass der benutzerdefinierte Trigger nicht ausgelöst wird, wenn der Replikationstrigger die Tabelle aktualisiert. Dazu wird die Prozedur
sp_check_for_sync_triggerim Textkörper des benutzerdefinierten Triggers aufgerufen. Weitere Informationen finden Sie unter sp_check_for_sync_trigger (Transact-SQL).
Sofortige Aktualisierung
Zum sofortigen Aktualisieren von Abonnements werden Änderungen am Abonnenten an den Publisher weitergegeben und mithilfe von Microsoft Distributed Transaction Coordinator (MS DTC) angewendet. Stellen Sie sicher, dass MS DTC im Publisher und Abonnenten installiert und konfiguriert ist. Weitere Informationen finden Sie in der Windows-Dokumentation.
Die Trigger, die von sofortigen Aktualisierungsabonnements verwendet werden, erfordern eine Verbindung mit dem Publisher, um Änderungen zu replizieren.
Wenn die Publikation das sofortige Aktualisieren von Abonnements zulässt und ein Artikel in der Publikation über einen Spaltenfilter verfügt, können Sie nicht nullbare Spalten ohne Standardwerte nicht herausfiltern.
Aktualisierung in der Warteschlange
Tabellen, die in einer Zusammenführungsveröffentlichung enthalten sind, können nicht auch als Teil einer Transaktionspublikation veröffentlicht werden, die Abonnements mit Warteschlangenaktualisierung erlaubt.
Aktualisierungen an Primärschlüsselspalten werden nicht empfohlen, wenn Aktualisierungen in der Warteschlange verwendet werden, da der Primärschlüssel als Datensatzlocator für alle Abfragen verwendet wird. Wenn die Konfliktlösungsrichtlinie auf "Subscriber Wins" festgelegt ist, sollten Aktualisierungen an Primärschlüsseln mit Vorsicht erfolgen. Wenn Aktualisierungen des Primärschlüssels sowohl beim Publisher als auch beim Abonnenten vorgenommen werden, werden zwei Zeilen mit unterschiedlichen Primärschlüsseln angezeigt.
Bei Spalten vom Datentyp
SQL_VARIANT: Wenn Daten beim Abonnenten eingefügt oder aktualisiert werden, werden sie vom Warteschlangenleser-Agent auf folgende Weise zugeordnet, wenn sie aus dem Abonnenten in die Warteschlange kopiert werden.BIGINT,DECIMAL,NUMERIC,MONEY, undSMALLMONEYwerdenNUMERICzugeordnet.BINARYundVARBINARYwerden Daten zugeordnetVARBINARY.
Konflikterkennung und -lösung
Für die Subscriber Wins-Konfliktrichtlinie: Konfliktlösung wird für Aktualisierungen von Primärschlüsselspalten nicht unterstützt.
Konflikte aufgrund von Fremdschlüsseleinschränkungsfehlern werden nicht durch Replikation behoben:
Wenn Konflikte nicht erwartet werden und Daten gut partitioniert sind (Abonnenten aktualisieren nicht dieselben Zeilen), können Sie Fremdschlüsseleinschränkungen für Publisher und Abonnenten verwenden.
Wenn Konflikte erwartet werden: Sie sollten bei Publisher oder Abonnenten keine Fremdschlüsseleinschränkungen verwenden, wenn Sie die Konfliktlösung "Subscriber wins" verwenden; Sie sollten beim Abonnenten keine Fremdschlüsseleinschränkungen verwenden, wenn Sie die Konfliktauflösung "Publisher wins" verwenden.
Siehe auch
Peer-to-Peer-Transaktionsreplikation
Transaktionsreplikation
Veröffentlichen von Daten- und Datenbankobjekten
Abonnieren von Veröffentlichungen