Erweiterte Konflikterkennung und -lösung bei der Mergereplikation
Gilt für: SQL Server
Wenn zwischen einem Verleger und einem Abonnenten eine Verbindung besteht und die Synchronisierung vorgenommen wird, werden jegliche Konflikte vom Merge-Agent erkannt. Wenn Konflikte erkannt werden, verwendet der Merge-Agent einen Konfliktlöser (der angegeben wird, wenn ein Artikel einer Veröffentlichung hinzugefügt wird), um festzustellen, welche Daten akzeptiert und an andere Sites weitergegeben werden.
Die Mergereplikation bietet eine Reihe unterschiedlicher Methoden zur Erkennung und Lösung von Konflikten. Für die meisten Anwendungen empfiehlt sich die Standardmethode.
- Wenn es zwischen einem Verleger und einem Abonnenten zu einem Konflikt kommt, wird die Verlegeränderung beibehalten und die Abonnentenänderung verworfen.
- Wenn es zwischen zwei Abonnenten bei der Verwendung von Clientabonnements (dem Standardtyp für Pullabonnements) zu einem Konflikt kommt, wird die Änderung des Abonnenten beibehalten, der als erster die Synchronisierung mit dem Verleger vornimmt. Die Änderung des zweiten Abonnenten wird verworfen. Informationen zum Angeben von Client- und Serverabonnements finden Sie unter Angeben eines Mergeabonnementtyps und einer Konfliktlösungspriorität (SQL Server Management Studio).
- Wenn es zwischen zwei Abonnenten bei der Verwendung von Serverabonnements (dem Standardtyp für Pushabonnements) zu einem Konflikt kommt, wird die Änderung des Abonnenten mit dem höchsten priority-Wert beibehalten, die Änderung des zweiten Abonnenten wird verworfen. Wenn die priority-Werte identisch sind, wird die Änderung des Abonnenten beibehalten, der als erster die Synchronisierung mit dem Verleger vornimmt.
Hinweis
Obwohl ein Abonnent mit dem Verleger synchronisiert wird, treten Konflikte normalerweise zwischen den Updates auf, die bei verschiedenen Abonnenten erfolgen, und nicht bei Updates, die bei einem Abonnenten und bei dem Verleger ausgeführt werden.
Das Verhalten der Konflikterkennung und -lösung ist von folgenden in diesem Thema beschriebenen Optionen abhängig:
Angabe der Nachverfolgung auf Spaltenebene, auf Zeilenebene oder auf der Ebene des logischen Datensatzes.
Angabe der standardmäßigen prioritätsbasierten Mechanismen zur Konfliktlösung oder Angabe eines Artikelkonfliktlösers. Als Artikelkonfliktlöser kommen infrage:
- Ein in verwaltetem Code geschriebener Geschäftslogikhandler
- Ein COM-basierter benutzerdefinierter Konfliktlöser
- Ein von Microsoft bereitgestellter COM-basierter Konfliktlöser.
Wenn der standardmäßige Mechanismus zur Konfliktlösung verwendet wird, wird das Verhalten durch den verwendeten Abonnementtyp, Client oder Server, näher bestimmt.
Konflikterkennung
Ob eine Datenänderung als Konflikt in Betracht kommt oder nicht ist vom Typ der für den Artikel festgelegten Konfliktnachverfolgung abhängig:
- Wenn Sie die Konfliktnachverfolgung auf Spaltenebene auswählen, wird eine Änderung als Konflikt eingestuft, wenn die Änderungen in derselben Spalte und derselben Zeile auf mehreren Replikationsknoten vorgenommen wurden.
- Wenn Sie die Nachverfolgung auf Zeilenebene auswählen, wird ein Konflikt verursacht, wenn Änderungen in beliebigen Spalten derselben Zeilen auf mehreren Replikationsknoten vorgenommen wurden (die betroffenen Spalten in den entsprechenden Zeilen müssen identisch sein).
- Wenn Sie die Nachverfolgung auf der Ebene des logischen Datensatzes auswählen, wird ein Konflikt verursacht, wenn Änderungen in beliebigen Zeilen desselben logischen Datensatzes auf mehreren Replikationsknoten vorgenommen wurden (die betroffenen Spalten in den entsprechenden Zeilen müssen identisch sein).
Weitere Informationen finden Sie unter Ermitteln und Lösen von Konflikten in logischen Datensätzen.
Informationen zum Angeben der Konfliktnachverfolgungs- und -lösungsebene für einen Artikel finden Sie unter Ändern von Mergereplikationseigenschaften.
Konfliktauflösung
Wenn ein Konflikt erkannt wird, startet der Merge-Agent den ausgewählten Konfliktlöser und verwendet diesen zur Bestimmung des Konfliktgewinners. Die Gewinnerzeile wird auf dem Verleger und auf dem Abonnenten angewendet, und die Daten der verlierenden Zeile werden in eine Konflikttabelle geschrieben. Konflikte werden direkt nach dem Ausführen des Konfliktlösers gelöst, es sei denn, Sie haben angegeben, dass Konflikte interaktiv gelöst werden sollen.
Lösen von Konflikten bei einer Mergereplikation
Gilt für: SQL Server
Wenn zwischen einem Verleger und einem Abonnenten eine Verbindung besteht und die Synchronisierung vorgenommen wird, werden jegliche Konflikte vom Merge-Agent erkannt. Wenn Konflikte erkannt werden, legt der Merge-Agent mithilfe eines Konfliktlösers fest, welche Daten akzeptiert und für andere Sites weitergegeben werden.
Hinweis
Obwohl ein Abonnement die Synchronisierung mit dem Verleger vornimmt, treten Konflikte in der Regel zwischen Updates auf, die auf verschiedenen Abonnenten vorgenommen wurden, und nicht notwendigerweise zwischen Updates auf einem Abonnenten und dem Verleger.
Die Mergereplikation bietet eine Reihe unterschiedlicher Methoden zur Erkennung und Lösung von Konflikten. Für die meisten Anwendungen empfiehlt sich die Standardmethode.
Wenn es zwischen einem Verleger und einem Abonnenten zu einem Konflikt kommt, wird die Verlegeränderung beibehalten und die Abonnentenänderung verworfen.
Wenn es zwischen zwei Abonnenten bei der Verwendung von Clientabonnements (dem Standardtyp für Pullabonnements) zu einem Konflikt kommt, wird die Änderung des Abonnenten beibehalten, der als erster die Synchronisierung mit dem Verleger vornimmt. Die Änderung des zweiten Abonnenten wird verworfen. Informationen zum Angeben von Client- und Serverabonnements finden Sie unter Angeben eines Mergeabonnementtyps und einer Konfliktlösungspriorität (SQL Server Management Studio).
Wenn es zwischen zwei Abonnenten bei der Verwendung von Serverabonnements (dem Standardtyp für Pushabonnements) zu einem Konflikt kommt, wird die Änderung des Abonnenten mit dem höchsten priority-Wert beibehalten, die Änderung des zweiten Abonnenten wird verworfen. Wenn die priority-Werte identisch sind, wird die Änderung des Abonnenten beibehalten, der als erster die Synchronisierung mit dem Verleger vornimmt.
Weitere Informationen zur Konflikterkennung und -lösung bei der Mergereplikation finden Sie unter Advanced Merge Replication Conflict Detection and Resolution.
Konfliktlösertypen
Bei der Mergereplikation erfolgt die Konfliktlösung auf Artikelebene. Bei Veröffentlichungen, die sich aus mehreren Artikeln zusammensetzen, ist die Verwendung unterschiedlicher Konfliktlöser für verschiedene Artikel oder desselben Konfliktlösers für einen Artikel, mehrere Artikel oder alle Artikel möglich, die zu einer Veröffentlichung gehören.
Wenn Sie den prioritätsbasierten Standardkonfliktlöser verwenden möchten, müssen Sie die Resolver-Eigenschaft eines Artikels nicht festlegen. Wenn ein Artikelkonfliktlöser anstatt des Standardkonfliktlösers verwendet werden soll, müssen Sie die Resolver-Eigenschaft für den jeweiligen Artikel festlegen, indem Sie einen verfügbaren Konfliktlöser auf dem Verleger auswählen. Spezielle Informationen, die an den Konfliktlöser weitergegeben werden müssen, können auch in der Eigenschaft für die Konfliktlöserinformationen angegeben werden.
Für die Mergereplikation stehen vier Arten von Konfliktlösern zur Verfügung:
Der prioritätsbasierte Standardkonfliktlöser
Der standardmäßige Konfliktlösungsmechanismus weist unterschiedliche Verhaltensweisen auf, je nachdem, ob es sich beim Abonnement um ein Client- oder ein Serverabonnement handelt. Sie können einzelnen Abonnenten, auf denen Serverabonnements verwendet werden, Priority-Werte zuweisen. Änderungen, die auf dem Knoten mit dem höchsten Priority-Wert vorgenommen werden, gewinnen alle Konflikte. Bei Clientabonnements gewinnt die Änderung den Konflikt, die zuerst auf den Verleger geschrieben wurde.
Nach der Erstellung eines Abonnements kann der zugehörige Abonnementtyp nicht mehr geändert werden.
Ein Geschäftslogikhandler
Im Geschäftslogikhandler können Sie eine Assembly in verwaltetem Code schreiben, die während des Mergesynchronisierungsvorgangs aufgerufen wird. Die Assembly enthält eine Geschäftslogik, die während der Synchronisierung auf Konflikte und mehrere andere Bedingungen reagieren kann. Weitere Informationen finden Sie unter Ausführen von Geschäftslogik während der Mergesynchronisierung.
Ein COM-basierter benutzerdefinierter Konfliktlöser
Die Mergereplikation stellt eine API bereit, mit der Konfliktlöser als COM-Objekte in Programmiersprachen wie Microsoft Visual C++ oder Microsoft Visual Basic geschrieben werden können. Weitere Informationen finden Sie unter COM-Based Custom Resolvers.
Ein von Microsoft bereitgestellter COM-basierter Konfliktlöser
Microsoft SQL Server enthält mehrere COM-basierte Konfliktlöser. Weitere Informationen finden Sie unter Microsoft COM-basierte Konfliktlöser.
Informationen zum Auswählen des geeigneten Konfliktlösertyps finden Sie unter Auswählen von Resolvern.
Hinweis
Einige Artikelkonfliktlöser wurden geschrieben, um nur Konflikte für bestimmte Operationen zu verarbeiten. So verarbeitet ein Konfliktlöser beispielsweise Updates, nicht jedoch Einfüge- oder Löschvorgänge. Der prioritätsbasierte Standardkonfliktlöser verarbeitet alle Konflikte, die nicht vom Artikelkonfliktlöser bearbeitet werden.
Information zum Angeben eines Mergeabonnementtyps und einer Konfliktlösungspriorität finden Sie im entsprechenden Artikel.
SQL Server Management Studio: Angeben eines Mergeabonnementtyps und einer Konfliktlösungspriorität (SQL Server Management Studio)
Replikationsprogrammierung mit Transact-SQL und Programmierung mit Replikationsverwaltungsobjekten (RMO): Erstellen eines Pullabonnements und Erstellen eines Pushabonnements
Interaktiver Konfliktlöser
Die Replikation stellt eine Benutzeroberfläche für den interaktiven Konfliktlöser bereit, die in Verbindung mit dem prioritätsbasierten Standardkonfliktlöser oder mit einem Artikelkonfliktlöser verwendet werden kann. Bei der Ausführung einer bedarfsgesteuerten Synchronisierung mit der Synchronisierungsverwaltung von Microsoft Windows zeigt der interaktive Konfliktlöser Konfliktdaten in Laufzeit an und bietet Ihnen die Möglichkeit, die Art der Konfliktlösung auszuwählen. Weitere Informationen zum Aktivieren der interaktiven Konfliktlösung und zum Starten des interaktiven Konfliktlösers finden Sie unter Interactive Conflict Resolution.
Anzeigen von Konflikten
Die einfachste Möglichkeit zum Anzeigen von Konflikten ist die Verwendung des Replikationskonflikt-Viewers, der ab SQL Server Management Studio verfügbar ist (SQL Server bietet ebenfalls gespeicherte Prozeduren, mit denen die Konflikttabellen abgefragt werden können). Der Konflikt-Viewer und die interaktive Konfliktlöser sind ähnliche Tools, im interaktiven Konfliktlöser können Sie jedoch bei der Synchronisierung Konflikte lösen, während der Konflikt-Viewer für die Anzeige von Konflikten nach der Konfliktlösung bestimmt ist. Wenn die Konfliktmetadaten weiterhin in den Systemtabellen verfügbar sind (Konfliktmetadaten werden standardmäßig 14 Tage lang beibehalten), können Sie die Ergebnisse der Konfliktlösung überschreiben. Wenn jedoch regelmäßig ein direktes Eingreifen erforderlich ist, sollten Sie die Verwendung des interaktiven Konfliktlösers in Betracht ziehen.
Hinweis
Konflikte, die logische Datensätze einschließen, werden im Konflikt-Viewer nicht angezeigt. Mit den gespeicherten Replikationsprozeduren können Informationen zu diesen Konflikten angezeigt werden. Weitere Informationen finden Sie unter Anzeigen von Konfliktinformationen zu Merge-Veröffentlichungen (Replikationsprogrammierung mit Transact-SQL).
Im Konflikt-Viewer werden Informationen aus drei Systemtabellen angezeigt:
Die Replikation erstellt eine Konflikttabelle für jede Tabelle in einem Mergeartikel, deren Name das folgende Format aufweist: MSmerge_conflict_<PublicationName>_<ArticleName>.
Konflikttabellen weisen dieselbe Struktur auf wie die Tabellen, auf denen sie basieren. Eine Zeile in einer dieser Tabellen besteht aus der verlierenden Version einer Konfliktzeile (die gewinnende Version der Zeile befindet sich in der eigentlichen Benutzertabelle).
Die MSmerge_conflict_info -Tabelle enthält Informationen zu allen Konflikten, einschließlich des Konflikttyps.
Die sysmergearticles -Tabelle identifiziert die Benutzertabellen mit Konflikttabellen und stellt Informationen zu den Konflikttabellen bereit.
Standardmäßig werden Konfliktinformationen an den folgenden Orten gespeichert:
Auf dem Verleger und Abonnenten, wenn die Veröffentlichung mindestens einen Kompatibilitätsgrad von 90RTM aufweist.
Auf dem Verleger, wenn die Veröffentlichung einen geringeren Kompatibilitätsgrad als 80RTM aufweist.
Auf dem Verleger, wenn auf den Abonnenten SQL Server Compact ausgeführt wird. Konfliktdaten dürfen nicht auf Abonnenten mit SQL Server Compact gespeichert werden.
So zeigen Sie Konflikte an
SQL Server Management Studio: Anzeigen und Lösen von Datenkonflikten für Mergeveröffentlichungen (SQL Server Management Studio)
Replikationsprogrammierung mit Transact-SQL: Anzeigen von Konfliktinformationen zu Mergeveröffentlichungen (Replikationsprogrammierung mit Transact-SQL)