Freigeben über


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 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 Herausgeber, wenn auf den Abonnenten SQL Server Compact ausgeführt wird. Konfliktdaten dürfen nicht auf Abonnenten mit SQL Server Compact 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 während der Synchronisierung auch mit dem interaktiven Microsoft-Replikationskonfliktlöser 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.

    • Aktivieren 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 mit den drei Punkten (...), und wechseln Sie in das entsprechende Verzeichnis. Klicken Sie auf OK , um das Dialogfeld Optionen zu beenden.

  6. Schließen Sie den Replikationskonflikt-Viewer.

Anzeigen von Konfliktinformationen

Wenn Konflikte während einer Mergereplikations aufgelöst werden, werden die Daten aus der verlierenden 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 Mergereplikationangegeben wird.

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergepublicationaus. Beachten Sie die Werte der folgenden Spalten im Resultset:

    • centralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Verleger gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Verleger 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 centralized_conflicts decentralized_conflicts
    publisher 1 0
    subscriber 0 1
    both 1 1
  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank oder auf dem Abonnementen für die Abonnementdatenbank sp_helpmergepublicationaus. 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 auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergeconflictrowsaus. 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 für die Abonnementdatenbank sp_helpmergeconflictrowsaus. 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 durch Fehler beim Löschen

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergepublicationaus. Beachten Sie die Werte der folgenden Spalten im Resultset:

    • centralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Verleger gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Verleger 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.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank oder auf dem Abonnementen für die Abonnementdatenbank sp_helpmergepublicationaus. 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 auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergedeleteconflictrowsaus. 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. Damit werden auf dem Verleger gespeicherte Informationen zu Löschkonflikten zurückgegeben.

    • Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_helpmergedeleteconflictrowsaus. 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. Damit werden auf dem Abonnenten gespeicherte Informationen zu Löschkonflikten zurückgegeben.