Konfliktlösung für die MergereplikationConflict resolution for Merge Replication

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions)

Konflikte bei der Mergereplikation werden anhand des für den jeweiligen Artikel angegebenen Konfliktlösers gelöst.Conflicts in merge replication are resolved based on the resolver specified for each article. Standardmäßig werden Konflikte ohne Benutzereingriff gelöst.By default, conflicts are resolved without the need for user intervention. Konflikte können jedoch im Replikationskonflikt-Viewer von MicrosoftMicrosoft angezeigt und das Ergebnis der Konfliktlösung kann geändert werden.But conflicts can be viewed, and the outcome of the resolution can be changed, in the MicrosoftMicrosoft Replication Conflict Viewer.

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.Conflict data is available in the Replication Conflict Viewer for the amount of time specified for the conflict retention period (with a default of 14 days). Zum Festlegen der Beibehaltungsdauer der Konflikte haben Sie folgende Möglichkeiten:To set the conflict retention period, either:

Standardmäßig werden Konfliktinformationen an den folgenden Orten gespeichert:By default, conflict information is stored:

  • Auf dem Verleger und Abonnenten, wenn die Veröffentlichung mindestens einen Kompatibilitätsgrad von 90RTM aufweist.At the Publisher and Subscriber if the publication compatibility level is 90RTM or higher.
  • Auf dem Verleger, wenn die Veröffentlichung einen geringeren Kompatibilitätsgrad als 80RTM aufweist.At the Publisher if the publication compatibility level is lower than 80RTM.
  • Auf dem Verleger, wenn auf den Abonnenten SQL Server CompactSQL Server Compactausgeführt wird.At the Publisher if Subscribers are running SQL Server CompactSQL Server Compact. Konfliktdaten dürfen nicht auf Abonnenten mit SQL Server CompactSQL Server Compact gespeichert werden.Conflict data cannot be stored on SQL Server CompactSQL Server Compact Subscribers.

Das Speichern von Konfliktinformationen wird von der conflict_logging -Veröffentlichungseigenschaft gesteuert.Storage of conflict information is controlled by the conflict_logging publication property. Weitere Informationen finden Sie unter sp_addmergepublication (Transact-SQL) und sp_changemergepublication (Transact-SQL).For more information, see sp_addmergepublication (Transact-SQL) and sp_changemergepublication (Transact-SQL).

Konflikte können während der Synchronisierung auch mit dem interaktiven MicrosoftMicrosoft -Replikationskonfliktlöser gelöst werden.Conflicts can also be resolved interactively during synchronization using the MicrosoftMicrosoft Interactive Resolver. Der interaktive Konfliktlöser ist über die Synchronisierungsverwaltung von MicrosoftMicrosoft Windows verfügbar.The Interactive Resolver is available through the MicrosoftMicrosoft Windows Synchronization Manager. Weitere Informationen finden Sie unter Synchronisieren eines Abonnements mithilfe der Synchronisierungsverwaltung von Windows (Synchronisierungsverwaltung von Windows).For more information, see Synchronize a Subscription Using Windows Synchronization Manager (Windows Synchronization Manager).

Auflösen von KonfliktenResolve conflicts

  1. Stellen Sie in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio eine Verbindung mit dem Verleger (oder gegebenenfalls Abonnenten) her, und erweitern Sie dann den Serverknoten.Connect to the Publisher (or Subscriber if appropriate) in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .Expand the Replication folder, and then expand the Local Publications folder.

  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.Right-click the publication for which you want to view conflicts, and then click View Conflicts.

    Hinweis

    Wenn für die conflict_logging -Eigenschaft der Wert 'subscriber' angegeben wurde, ist die Menüoption Konflikte anzeigen nicht verfügbar.If you specified a value of 'subscriber' for the conflict_logging property, the View Conflicts menu option is not available. Starten Sie zum Anzeigen von Konflikten ConflictViewer.exe von der Eingabeaufforderung aus.To view conflicts, start ConflictViewer.exe from the command prompt. ConflictViewer.exe befindet sich standardmäßig im folgenden Verzeichnis: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE.By default, ConflictViewer.exe is located in the following directory: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Eine Liste der gültigen Startparameter erhalten Sie, wenn Sie ConflictViewer.exe -? ausführen.For a list of valid startup parameters, run ConflictViewer.exe -?.

  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.In the Select Conflict Table dialog box, select a database, publication, and table for which to view conflicts.

  5. Im Replikationskonflikt-Viewer können Sie folgende Aktionen ausführen:In the Replication Conflict Viewer, you can:

    • Filtern Sie Zeilen mit den Schaltflächen rechts vom oberen Raster.Filter rows with the buttons to the right of the upper grid.

    • Wählen Sie eine Zeile im oberen Raster aus, um Informationen zur Zeile im unteren Raster anzuzeigen.Select a row in the upper grid to display information on that row in the lower grid.

    • 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).Select one or more rows in the upper grid, and then click Remove, which is equivalent to clicking the Submit Winner button (without making any changes to the data).

    • Klicken Sie auf die Eigenschaftenschaltfläche ( ), um weitere Informationen zu einer am Konflikt beteiligten Zeile anzuzeigen.Click the properties button (...) to view more information on a column involved in a conflict.

    • Bearbeiten Sie Daten in den Spalten Konfliktgewinner oder Konfliktverlierer , bevor Sie die Daten absenden (bei einer grauen Spalte sind die Daten schreibgeschützt).Edit data in the Conflict winner or Conflict loser column before submitting the data (data is read-only if the column is gray).

    • Klicken Sie auf Gewinner absenden , um die als Gewinner des Konflikts ausgewiesene Spalte zu akzeptieren.Click Submit Winner to accept the row designated as the winner of the conflict.

    • 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.Click Submit Loser to override the resolution and to propagate the value designated as the loser of the conflict to all nodes in the topology.

    • Aktivieren Sie Details dieses Konflikts protokollieren , um Konfliktdaten in einer Datei zu protokollieren.Select Log the details of this conflict to log conflict data to a file. Um einen Speicherort für die Datei anzugeben, zeigen Sie auf das Menü Ansicht , und klicken Sie dann auf Optionen.To specify a location for the file, point to the View menu, and then click Options. Geben Sie einen Wert ein, oder klicken Sie auf die Schaltfläche mit den drei Punkten ( ... ), und wechseln Sie in das entsprechende Verzeichnis.Enter a value, or click the browse button (...), and then navigate to the appropriate file. Klicken Sie auf OK , um das Dialogfeld Optionen zu beenden.Click OK to exit the Options dialog box.

  6. Schließen Sie den Replikationskonflikt-Viewer.Close the Replication Conflict Viewer.

Anzeigen von KonfliktinformationenView conflict information

Wenn Konflikte während einer Mergereplikations aufgelöst werden, werden die Daten aus der verlierenden Zeile in eine Konflikttabelle geschrieben.When a conflict is resolved in merge replication, the data from the losing row is written to a conflict table. Diese Konfliktdaten können programmgesteuert mithilfe gespeicherter Replikationsprozeduren angezeigt werden.This conflict data can be viewed programmatically by using replication stored procedures. Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Mergereplikationangegeben wird.For more information, see Advanced Merge Replication Conflict Detection and Resolution.

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergepublicationaus.At the Publisher on the publication database, execute sp_helpmergepublication. Beachten Sie die Werte der folgenden Spalten im Resultset:Note the values of the following columns in the result set:

    • centralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Verleger gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Verleger gespeichert werden.centralized_conflicts - 1 indicates that conflict rows are stored at the Publisher, and 0 indicates that conflict rows are not stored at the Publisher.

    • decentralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Abonnenten gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Abonnenten gespeichert werden.decentralized_conflicts - 1 indicates that conflict rows are stored at the Subscriber, and 0 indicates that conflict rows are not stored at the Subscriber.

      Hinweis

      Das Konfliktprotokollierungsverhalten einer Mergeveröffentlichung wird mithilfe des @conflict_logging-Parameters von sp_addmergepublication festgelegt.The conflict logging behavior of a merge publication is set by using the @conflict_logging parameter of sp_addmergepublication. Der @centralized_conflicts-Parameter wurde als veraltet markiert.Use of the @centralized_conflicts parameter has been deprecated.

    In der folgenden Tabelle werden die Werte dieser Spalten basierend auf dem für @conflict_logging festgelegten Wert beschrieben.The following table describes the values of these columns based on the value specified for @conflict_logging.

    Wert vom Typ @conflict_logging@conflict_logging value centralized_conflictscentralized_conflicts decentralized_conflictsdecentralized_conflicts
    publisherpublisher 11 00
    subscribersubscriber 00 11
    bothboth 11 11
  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank oder auf dem Abonnementen für die Abonnementdatenbank sp_helpmergepublicationaus.At either the Publisher on the publication database or at the Subscriber on the subscription database, execute sp_helpmergearticleconflicts. Geben Sie einen Wert für @publication an, um nur Konfliktinformationen zu Artikeln zurückzugeben, die zu einer bestimmten Veröffentlichung gehören.Specify a value for @publication to only return conflict information for articles that belong to a specific publication. Damit werden Konflikttabelleninformationen für Artikel mit Konflikten zurückgegeben.This returns conflict table information for articles with conflicts. Notieren Sie den Wert von conflict_table bei allen Artikeln, die von Interesse sind.Note the value of conflict_table for any articles of interest. Wenn conflict_table für einen Artikel den Wert NULL hat, werden nur die Konflikte gelöscht, die in diesem Artikel aufgetreten sind.If the value of conflict_table for an article is NULL, only delete conflicts have occurred in this article.

  3. (Optional) Überprüfen Sie die Konfliktzeilen für die Artikel, die von Interesse sind.(Optional) Review conflict rows for articles of interest. Wählen Sie abhängig von den Werten von centralized_conflicts und decentralized_conflicts aus Schritt 1 eine der folgenden Vorgehensweisen:Depending on the values of centralized_conflicts and decentralized_conflicts from step 1, do one of the following:

    • Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergeconflictrowsaus.At the Publisher on the publication database, execute sp_helpmergeconflictrows. Geben Sie für den Artikel (aus Schritt 1) eine Konflikttabelle für @conflict_table an.Specify a conflict table for the article (from step 1) for @conflict_table. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken.(Optional) Specify a value of @publication to restrict returned conflict information to a specific publication. Damit werden Zeilendaten und andere Informationen für die verlierende Zeile zurückgegeben.This returns row data and other information for the losing row.

    • Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_helpmergeconflictrowsaus.At the Subscriber on the subscription database, execute sp_helpmergeconflictrows. Geben Sie für den Artikel (aus Schritt 1) eine Konflikttabelle für @conflict_table an.Specify a conflict table for the article (from step 1) for @conflict_table. Damit werden Zeilendaten und andere Informationen für die verlierende Zeile zurückgegeben.This returns row data and other information for the losing row.

Konflikt durch Fehler beim LöschenConflict where delete failed

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergepublicationaus.At the Publisher on the publication database, execute sp_helpmergepublication. Beachten Sie die Werte der folgenden Spalten im Resultset:Note the values of the following columns in the result set:

    • centralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Verleger gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Verleger gespeichert werden.centralized_conflicts - 1 indicates that conflict rows are stored at the Publisher, and 0 indicates that conflict rows are not stored at the Publisher.

    • decentralized_conflicts – 1 zeigt an, dass Konfliktzeilen auf dem Abonnenten gespeichert werden, und 0 zeigt an, dass Konfliktzeilen nicht auf dem Abonnenten gespeichert werden.decentralized_conflicts - 1 indicates that conflict rows are stored at the Subscriber, and 0 indicates that conflict rows are not stored at the Subscriber.

      Hinweis

      Das Konfliktprotokollierungsverhalten einer Mergeveröffentlichung wird mithilfe des @conflict_logging-Parameters von sp_addmergepublication festgelegt.The conflict logging behavior of a merge publication is set using the @conflict_logging parameter of sp_addmergepublication. Der @centralized_conflicts-Parameter wurde als veraltet markiert.Use of the @centralized_conflicts parameter has been deprecated.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank oder auf dem Abonnementen für die Abonnementdatenbank sp_helpmergepublicationaus.At either the Publisher on the publication database or at the Subscriber on the subscription database, execute sp_helpmergearticleconflicts. Geben Sie einen Wert für @publication an, um nur Konflikttabelleninformationen zu Artikeln zurückzugeben, die zu einer bestimmten Veröffentlichung gehören.Specify a value for @publication to only return conflict table information for articles that belong to a specific publication. Damit werden Konflikttabelleninformationen für Artikel mit Konflikten zurückgegeben.This returns conflict table information for articles with conflicts. Notieren Sie den Wert von source_object bei allen Artikeln, die von Interesse sind.Note the value of source_object for any articles of interest. Wenn conflict_table für einen Artikel den Wert NULL hat, werden nur die Konflikte gelöscht, die in diesem Artikel aufgetreten sind.If the value of conflict_table for an article is NULL, only delete conflicts have occurred in this article.

  3. (Optional) Überprüfen Sie die Konfliktinformationen für Löschkonflikte.(Optional) Review conflict information for delete conflicts. Wählen Sie abhängig von den Werten von centralized_conflicts und decentralized_conflicts aus Schritt 1 eine der folgenden Vorgehensweisen:Depending on the values of centralized_conflicts and decentralized_conflicts from step 1, do one of the following:

    • Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_helpmergedeleteconflictrowsaus.At the Publisher on the publication database, execute sp_helpmergedeleteconflictrows. Geben Sie den Namen der Quelltabelle (aus Schritt 1) an, in der der Konflikt bezüglich @source_object aufgetreten ist.Specify the name of the source table (from step 1) on which the conflict occurred for @source_object. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken.(Optional) Specify a value of @publication to restrict returned conflict information to a specific publication. Damit werden auf dem Verleger gespeicherte Informationen zu Löschkonflikten zurückgegeben.This returns delete conflict information stored at the Publisher.

    • Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_helpmergedeleteconflictrowsaus.At the Subscriber on the subscription database, execute sp_helpmergedeleteconflictrows. Geben Sie den Namen der Quelltabelle (aus Schritt 1) an, in der der Konflikt bezüglich @source_object aufgetreten ist.Specify the name of the source table (from step 1) on which the conflict occurred for @source_object. (Optional) Geben Sie den Wert @publication an, um zurückgegebene Konfliktinformationen auf eine bestimmte Veröffentlichung zu beschränken.(Optional) Specify a value of @publication to restrict returned conflict information to a specific publication. Damit werden auf dem Abonnenten gespeicherte Informationen zu Löschkonflikten zurückgegeben.This returns delete conflict information stored at the Subscriber.

Weitere InformationenSee Also

Erweiterte Konflikterkennung und -lösung der Mergereplikation Advanced Merge Replication Conflict Detection and Resolution
Angeben eines MergeartikelkonfliktlösersSpecify a Merge Article Resolver