Erweiterte Konflikterkennung und -lösung bei der Mergereplikation

Wenn zwischen einem Verleger und einem Abonnent 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. Eine vollständige Liste mit Konflikttypen finden Sie im Abschnitt zu den Konflikttypen unter Konflikterkennung und -lösung bei der Mergereplikation.

HinweisHinweis

Obwohl ein Abonnent mit dem Verleger synchronisiert wird, treten Konflikte normalerweise zwischen den Aktualisierungen auf, die bei verschiedenen Abonnenten erfolgen, und nicht bei Aktualisierungen, 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 zur Nachverfolgungsstufe finden Sie im Abschnitt zur Nachverfolgungsstufe unter Konflikterkennung und -lösung bei der Mergereplikation und Ermitteln und Lösen von Konflikten in logischen Datensätzen.

So geben Sie die Ebene für die Konfliktnachverfolgung und die Konfliktlösung für einen Artikel an

Konfliktlö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.

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. Weitere Informationen zu Abonnementtypen finden Sie im Abschnitt zu Abonnementtypen unter Konflikterkennung und -lösung bei der Mergereplikation.

    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 der 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, z. B. MicrosoftVisual C++ oder MicrosoftVisual Basic, geschrieben werden können. Weitere Informationen finden Sie unter COM-basierte benutzerdefinierte Konfliktlöser.

  • Ein von Microsoft bereitgestellter COM-basierter Konfliktlöser

    MicrosoftSQL 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 Konfliktlösern.

HinweisHinweis

Einige Artikelkonfliktlöser wurden geschrieben, um nur Konflikte für bestimmte Operationen zu verarbeiten. So verarbeitet ein Konfliktlöser beispielsweise Aktualisierungen, nicht jedoch Einfüge- oder Löschvorgänge. Der prioritätsbasierte Standardkonfliktlöser verarbeitet alle Konflikte, die nicht vom Artikelkonfliktlöser bearbeitet werden.

So geben Sie einen Mergeabonnementtyp und eine Konfliktlösungspriorität an

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 Interaktive Konfliktlösung.

Anzeigen von Konflikten

Die einfachste Möglichkeit zum Anzeigen von Konflikten ist die Verwendung des Replikationskonflikt-Viewers, der in 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 außer Kraft setzen. Wenn jedoch regelmäßig ein direktes Eingreifen erforderlich ist, sollten Sie die Verwendung des interaktiven Konfliktlösers in Betracht ziehen.

HinweisHinweis

Konflikte im Zusammenhang mit logischen Datensätzen werden nicht im Konflikt-Viewer angezeigt. Mit den gespeicherten Replikationsprozeduren können Informationen zu diesen Konflikten angezeigt werden. Weitere Informationen finden Sie unter Vorgehensweise: Anzeigen von Konfliktinformationen zu Mergeverö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.

Konfliktinformationen werden standardmäßig wie folgt gespeichert:

  • Auf dem Verleger und auf dem Abonnenten, wenn der Veröffentlichungskompatibilitätsgrad mindestens 90RTM beträgt. Weitere Informationen zum Kompatibilitätsgrad bei Mergeveröffentlichungen finden Sie im entsprechenden Abschnitt im Thema Verwenden mehrerer Versionen von SQL Server in einer Replikationstopologie.

  • Auf dem Verleger, wenn der Kompatibilitätsgrad unter 80RTM liegt.

  • Auf dem Verleger, wenn auf den Abonnenten SQL Server Compact 3.5 SP1 ausgeführt wird. Konfliktdaten dürfen nicht auf Abonnenten mit SQL Server Compact 3.5 SP1 gespeichert werden.

So zeigen Sie Konflikte an

Siehe auch

Konzepte