Konfliktlösung für die Mergereplikation

Gilt für:SQL Server

Konflikte bei der Mergereplikation werden anhand des für den jeweiligen Artikel angegebenen Konfliktlösers gelöst. Standardmäßig werden Konflikte ohne Benutzereingriff gelöst. Konflikte können jedoch im Replikationskonflikt-Viewer von Microsoft angezeigt und das Ergebnis der Konfliktlösung kann geändert werden.

Die Konfliktdaten sind im Replikationskonflikt-Viewer für den Zeitraum verfügbar, der als Beibehaltungsdauer der Konflikte (bei einer Standardeinstellung von 14 Tagen) angegeben wurde. Zum Festlegen der Beibehaltungsdauer der Konflikte haben Sie folgende Möglichkeiten:

Standardmäßig werden Konfliktinformationen an den folgenden Orten gespeichert:

  • Auf dem Publisher und dem Subscriber, wenn der Kompatibilitätsgrad der Veröffentlichung 90RTM oder höher ist.
  • Beim Publisher, wenn die Publikation eine Kompatibilitätsstufe unter 80RTM aufweist.
  • Beim Verleger, wenn Abonnenten SQL Server Compact verwenden. Konfliktdaten können nicht auf SQL Server Compact-Abonnenten gespeichert werden.

Das Speichern von Konfliktinformationen wird von der conflict_logging -Veröffentlichungseigenschaft gesteuert. Weitere Informationen finden Sie unter sp_addmergepublication (Transact-SQL) und sp_changemergepublication (Transact-SQL).

Konflikte können auch während der Synchronisierung interaktiv mithilfe des Microsoft Interactive Resolver gelöst werden. Der interaktive Konfliktlöser ist über die Synchronisierungsverwaltung für Microsoft Windows verfügbar. Weitere Informationen finden Sie unter Synchronisieren eines Abonnements mithilfe der Synchronisierungsverwaltung von Windows (Synchronisierungsverwaltung von Windows).

Auflösen von Konflikten

  1. Stellen Sie mit dem Herausgeber (oder Abonnenten, wenn passend) in Microsoft SQL Server Management Studio eine Verbindung her, und erweitern Sie dann den Serverknoten.

  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .

  3. Klicken Sie mit der rechten Maustaste auf die Veröffentlichung, für die Sie die Konflikte anzeigen möchten, und klicken Sie dann auf Konflikte anzeigen.

    Hinweis

    Wenn für die conflict_logging -Eigenschaft der Wert 'subscriber' angegeben wurde, ist die Menüoption Konflikte anzeigen nicht verfügbar. Starten Sie zum Anzeigen von Konflikten ConflictViewer.exe von der Eingabeaufforderung aus. ConflictViewer.exe befindet sich standardmäßig im folgenden Verzeichnis: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Eine Liste der gültigen Startparameter erhalten Sie, wenn Sie ConflictViewer.exe -? ausführen.

  4. Wählen Sie im Dialogfeld Konflikttabelle auswählen eine Datenbank, eine Veröffentlichung und eine Tabelle aus, für die Sie die Konflikte anzeigen möchten.

  5. Im Replikationskonflikt-Viewer können Sie folgende Aktionen ausführen:

    • Filtern Sie Zeilen mit den Schaltflächen rechts vom oberen Raster.

    • Wählen Sie eine Zeile im oberen Raster aus, um Informationen zur Zeile im unteren Raster anzuzeigen.

    • Wählen Sie eine oder mehrere Zeilen im oberen Raster aus, und klicken Sie auf Entfernen, was dem Klicken auf die Schaltfläche Gewinner absenden entspricht (ohne Änderungen an den Daten vorzunehmen).

    • Klicken Sie auf die Eigenschaftenschaltfläche (), um weitere Informationen zu einer am Konflikt beteiligten Zeile anzuzeigen.

    • Bearbeiten Sie Daten in den Spalten Konfliktgewinner oder Konfliktverlierer , bevor Sie die Daten absenden (bei einer grauen Spalte sind die Daten schreibgeschützt).

    • Klicken Sie auf Gewinner absenden , um die als Gewinner des Konflikts ausgewiesene Spalte zu akzeptieren.

    • Klicken Sie auf Verlierer absenden , um die Konfliktlösung zu überschreiben und den als Verlierer des Konflikts ausgewiesenen Wert an alle Knoten der Topologie zu senden.

    • Wählen Sie Details dieses Konflikts protokollieren, um Konfliktdaten in einer Datei zu protokollieren. Um einen Speicherort für die Datei anzugeben, zeigen Sie auf das Menü Ansicht , und klicken Sie dann auf Optionen. Geben Sie einen Wert ein oder klicken Sie auf die Schaltfläche „Durchsuchen“ (...) und navigieren Sie dann zur entsprechenden Datei. Klicken Sie auf OK , um das Dialogfeld Optionen zu beenden.

  6. Schließen Sie den Replikationskonflikt-Viewer.

Anzeigen von Konfliktinformationen

Wenn ein Konflikt bei der Mergereplikation aufgelöst wird, werden die Daten aus der unterlegenen Zeile in eine Konflikttabelle geschrieben. Diese Konfliktdaten können programmgesteuert mithilfe gespeicherter Replikationsprozeduren angezeigt werden. Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Merge-Replikation.

  1. Führen Sie beim Publisher in der Publikationsdatenbank sp_helpmergepublication aus. Beachten Sie die Werte der folgenden Spalten im Resultset:

    • centralized_conflicts – 1 gibt an, dass Konfliktzeilen beim Publisher gespeichert werden, und 0 gibt an, dass Konfliktzeilen nicht beim Publisher gespeichert werden.

    • decentralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Abonnenten gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Abonnenten gespeichert werden.

      Hinweis

      Das Konfliktprotokollierungsverhalten einer Mergeveröffentlichung wird mithilfe des @conflict_logging-Parameters von sp_addmergepublication festgelegt. Der @centralized_conflicts-Parameter wurde als veraltet markiert.

    In der folgenden Tabelle werden die Werte dieser Spalten basierend auf dem für @conflict_logging festgelegten Wert beschrieben.

    @conflict_logging-Wert zentralisierte_Konflikte dezentralisierte_Konflikte
    publisher 1 0
    subscriber 0 1
    both 1 1
  2. Führen Sie entweder beim Publisher in der Veröffentlichungsdatenbank oder beim Subscriber in der Abonnementdatenbank sp_helpmergearticleconflicts aus. Geben Sie einen Wert für @publication an, um nur Konfliktinformationen zu Artikeln zurückzugeben, die zu einer bestimmten Veröffentlichung gehören. Damit werden Konflikttabelleninformationen für Artikel mit Konflikten zurückgegeben. Notieren Sie den Wert von conflict_table bei allen Artikeln, die von Interesse sind. Wenn conflict_table für einen Artikel den Wert NULL hat, werden nur die Konflikte gelöscht, die in diesem Artikel aufgetreten sind.

  3. (Optional) Überprüfen Sie die Konfliktzeilen für die Artikel, die von Interesse sind. Wählen Sie abhängig von den Werten von centralized_conflicts und decentralized_conflicts aus Schritt 1 eine der folgenden Vorgehensweisen:

    • Führen Sie beim Publisher in der Veröffentlichungsdatenbank sp_helpmergeconflictrows aus. Geben Sie für den Artikel (aus Schritt 1) eine Konflikttabelle für @conflict_table an. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken. Damit werden Zeilendaten und andere Informationen für die verlierende Zeile zurückgegeben.

    • Führen Sie auf dem Abonnenten in der Abonnementdatenbank sp_helpmergeconflictrows aus. Geben Sie für den Artikel (aus Schritt 1) eine Konflikttabelle für @conflict_table an. Damit werden Zeilendaten und andere Informationen für die verlierende Zeile zurückgegeben.

Konflikt wegen fehlgeschlagenem Löschen

  1. Führen Sie beim Publisher in der Publikationsdatenbank sp_helpmergepublication aus. Beachten Sie die Werte der folgenden Spalten im Resultset:

    • centralized_conflicts – 1 zeigt an, dass Konfliktzeilen beim Publisher gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht beim Publisher gespeichert werden.

    • decentralized_conflicts – 1 zeigt an, dass Konfliktzeilen beim Abonnenten gespeichert werden, und 0 zeigt an, dass Konfliktzeilen beim Abonnenten nicht gespeichert werden.

      Hinweis

      Das Konfliktprotokollierungsverhalten einer Mergeveröffentlichung wird mithilfe des @conflict_logging-Parameters von sp_addmergepublication festgelegt. Der @centralized_conflicts-Parameter wurde als veraltet markiert.

  2. Führen Sie beim Publisher auf der Veröffentlichungsdatenbank oder beim Subscriber auf der Abonnementdatenbank sp_helpmergearticleconflicts aus. Geben Sie einen Wert für @publication an, um nur Konflikttabelleninformationen zu Artikeln zurückzugeben, die zu einer bestimmten Veröffentlichung gehören. Damit werden Konflikttabelleninformationen für Artikel mit Konflikten zurückgegeben. Notieren Sie den Wert von source_object bei allen Artikeln, die von Interesse sind. Wenn conflict_table für einen Artikel den Wert NULL hat, werden nur die Konflikte gelöscht, die in diesem Artikel aufgetreten sind.

  3. (Optional) Überprüfen Sie die Konfliktinformationen für Löschkonflikte. Wählen Sie abhängig von den Werten von centralized_conflicts und decentralized_conflicts aus Schritt 1 eine der folgenden Vorgehensweisen:

    • Führen Sie beim Verleger in der Veröffentlichungsdatenbank sp_helpmergedeleteconflictrows aus. Geben Sie den Namen der Quelltabelle (aus Schritt 1) an, in der der Konflikt bezüglich @source_object aufgetreten ist. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken. Dies gibt Informationen zu Löschkonflikten zurück, die beim Verleger gespeichert sind.

    • Führen Sie auf dem Abonnenten in der Abonnementdatenbank sp_helpmergedeleteconflictrows aus. Geben Sie den Namen der Quelltabelle (aus Schritt 1) an, in der der Konflikt bezüglich @source_object aufgetreten ist. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken. Gibt die auf dem Abonnenten gespeicherten Informationen zu Löschkonflikten zurück.