Conflictoplossing voor Merge Replicatie

Van toepassing op:SQL Server

Conflicten bij merge-replicatie worden opgelost op basis van de resolver die voor elk artikel is gespecificeerd. Standaard worden conflicten opgelost zonder dat gebruikersinterventie nodig is. Maar conflicten kunnen worden bekeken en de uitkomst van de oplossing kan worden aangepast in de Microsoft Replication Conflict Viewer.

Conflictgegevens zijn beschikbaar in de Replication Conflict Viewer voor de tijd die is opgegeven voor de conflictbehoudsperiode (met een standaard van 14 dagen). Om de retentieperiode van conflicten vast te stellen, geldt ofwel:

Conflictinformatie wordt standaard opgeslagen:

  • Bij de Publisher en Subscriber indien het compatibiliteitsniveau van de publicatie 90RTM of hoger is.
  • Bij Publisher als het compatibiliteitsniveau van de publicatie lager is dan 80RTM.
  • Bij de uitgever als de abonnees SQL Server Compact gebruiken. Conflictgegevens kunnen niet worden opgeslagen op compacte SQL Server-abonnees.

De opslag van conflictinformatie wordt beheerd door de conflict_logging publicatie-eigenschap. Voor meer informatie, zie sp_addmergepublication (Transact-SQL ) en sp_changemergepublication (Transact-SQL).

Conflicten kunnen ook interactief worden opgelost tijdens synchronisatie met behulp van de Microsoft Interactive Resolver. De Interactive Resolver is beschikbaar via het Microsoft Windows Synchronization Manager. Zie Een abonnement synchroniseren met Windows Synchronization Manager (Windows Synchronization Manager) voor meer informatie.

Conflicten oplossen

  1. Maak verbinding met de Publisher (of abonnee indien van toepassing) in Microsoft SQL Server Management Studio en breid vervolgens de servernode uit.

  2. Vouw de map Replicatie uit en vouw vervolgens de map Lokale publicaties uit.

  3. Klik met de rechtermuisknop op de publicatie waarvoor u conflicten wilt weergeven en klik vervolgens op Conflicten weergeven.

    Note

    Als je een waarde 'abonnee ' hebt opgegeven voor de conflict_logging-eigenschap , is de optie Conflicten bekijken niet beschikbaar. Om conflicten te bekijken, begin je ConflictViewer.exe via de opdrachtprompt. Standaard bevindt ConflictViewer.exe zich in de volgende map: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Voor een lijst met geldige opstartparameters, voer ConflictViewer.exe -?.

  4. Selecteer in het dialoogvenster Conflicttabel selecteren een database, publicatie en tabel waarvoor u conflicten wilt weergeven.

  5. In de viewer voor replicatieconflicten kunt u het volgende doen:

    • Filter de rijen met de knoppen rechts van de bovenste tabel.

    • Selecteer een rij in het bovenste raster om informatie over die rij weer te geven in het onderste raster.

    • Selecteer één of meer rijen in het bovenste raster en klik vervolgens op Verwijderen, wat gelijkstaat aan het klikken op de knop Winnaar Indienen (zonder wijzigingen aan de gegevens).

    • Klik op de eigenschappenknop (...) om meer informatie weer te geven over een kolom die betrokken is bij een conflict.

    • Bewerk gegevens in de kolom Winnende conflict of Verliezende conflict voordat je de gegevens verzendt (als de kolom grijs is, kunnen de gegevens niet worden bewerkt).

    • Klik op Winnaar Indienen om de rij te accepteren die als winnaar van het conflict is aangewezen.

    • Klik op Submit Loser om de resolutie te overrulen en de als verliezer van het conflict aangewezen waarde door te geven aan alle knooppunten in de topologie.

    • Selecteer Log de details van dit conflict om de conflictgegevens naar een bestand te loggen. Als u een locatie voor het bestand wilt opgeven, wijst u het menu Beeld aan en klikt u op Opties. Voer een waarde in of klik op de bladerknop (...) en navigeer naar het juiste bestand. Klik op OK om het dialoogvenster Opties af te sluiten.

  6. Sluit de viewer voor replicatieconflicten.

Conflictinformatie weergeven

Wanneer een conflict wordt opgelost in merge replicatie, wordt de data van de verliezende rij naar een conflicttabel geschreven. Deze conflictgegevens kunnen programmatisch worden bekeken door replicatie-opgeslagen procedures te gebruiken. Zie Advanced Merge Replication Conflict Detection and Resolution (Geavanceerde samenvoegingsconflictdetectie en -oplossing) voor meer informatie.

  1. Voer op de Publisher in de publicatiedatabase sp_helpmergepublication uit. Let op de waarden van de volgende kolommen in de resultaatset:

    • centralized_conflicts - 1 geeft aan dat conflictrijen worden opgeslagen op de Publisher, en 0 geeft aan dat conflictrijen niet worden opgeslagen op de Publisher.

    • decentralized_conflicts - 1 geeft aan dat conflictrijen worden opgeslagen bij de abonnee, en 0 geeft aan dat conflictrijen niet bij de abonnee worden opgeslagen.

      Note

      Het conflictregistratiegedrag van een mergepublicatie wordt ingesteld met behulp van de @conflict_logging parameter sp_addmergepublication. Het gebruik van de @centralized_conflicts parameter is verouderd.

    De volgende tabel beschrijft de waarden van deze kolommen op basis van de waarde die voor @conflict_loggingis gespecificeerd.

    @conflict_logging waarde gecentraliseerde_conflicten gedecentraliseerde_conflicten
    uitgever 1 0
    Abonnee 0 1
    Beide 1 1
  2. Voer sp_helpmergearticleconflicts uit, ofwel bij de Publisher in de publicatiedatabase of bij de Subscriber in de abonnementsdatabase. Specificeer een waarde voor @publication om alleen conflictinformatie terug te geven voor artikelen die tot een specifieke publicatie behoren. Dit geeft informatie over de conflicttabel terug voor artikelen met conflicten. Noteer de waarde van conflict_table voor eventuele artikelen van interesse. Als de waarde van conflict_table voor een artikel NULL is, zijn er alleen verwijderconflicten in dit artikel geweest.

  3. (Optioneel) Controleer conflictrijen voor relevante artikelen. Afhankelijk van de waarden van centralized_conflicts en decentralized_conflicts uit stap 1, doe je een van de volgende:

    • Voer op de Publisher in de publicatiedatabase sp_helpmergeconflictrows uit. Specificeer een conflicttabel voor het artikel (vanaf stap 1) voor @conflict_table. (Optioneel) Specificeer een waarde van @publication om teruggegeven conflictinformatie te beperken tot een specifieke publicatie. Dit geeft rijgegevens en andere informatie terug voor de verliezende rij.

    • Voer bij de abonnee in de abonnementsdatabase sp_helpmergeconflictrows uit. Specificeer een conflicttabel voor het artikel (vanaf stap 1) voor @conflict_table. Dit geeft rijgegevens en andere informatie terug voor de verliezende rij.

Conflict waarbij verwijderen mislukte

  1. Voer op de Publisher in de publicatiedatabase sp_helpmergepublication uit. Let op de waarden van de volgende kolommen in de resultaatset:

    • centralized_conflicts - 1 geeft aan dat conflictrijen worden opgeslagen op de Publisher, en 0 geeft aan dat conflictrijen niet worden opgeslagen op de Publisher.

    • decentralized_conflicts - 1 geeft aan dat conflictrijen worden opgeslagen bij de abonnee, en 0 geeft aan dat conflictrijen niet bij de abonnee worden opgeslagen.

      Note

      Het conflictregistratiegedrag van een mergepublicatie wordt ingesteld met de @conflict_logging parameter sp_addmergepublication. Het gebruik van de @centralized_conflicts parameter is verouderd.

  2. Voer sp_helpmergearticleconflicts uit, ofwel bij de Publisher in de publicatiedatabase of bij de Subscriber in de abonnementsdatabase. Specificeer een waarde voor @publication om alleen conflicttabelinformatie terug te geven voor artikelen die tot een specifieke publicatie behoren. Dit geeft informatie over de conflicttabel terug voor artikelen met conflicten. Noteer de waarde van source_object voor eventuele artikelen van interesse. Als de waarde van conflict_table voor een artikel NULL is, zijn er alleen verwijderconflicten in dit artikel geweest.

  3. (Optioneel) Bekijk conflictinformatie voor verwijderingsconflicten. Afhankelijk van de waarden van centralized_conflicts en decentralized_conflicts uit stap 1, doe je een van de volgende:

    • Voer op de Publisher in de publicatiedatabase sp_helpmergedeleteconflictrows uit. Geef de naam aan van de brontabel (vanaf stap 1) waarop het conflict plaatsvond voor @source_object. (Optioneel) Specificeer een waarde van @publication om teruggegeven conflictinformatie te beperken tot een specifieke publicatie. Dit retourneert verwijderde conflictinformatie die bij de Publisher is opgeslagen.

    • Voer sp_helpmergedeleteconflictrows uit bij de abonnee in de abonnementsdatabase. Geef de naam aan van de brontabel (vanaf stap 1) waarop het conflict plaatsvond voor @source_object. (Optioneel) Specificeer een waarde van @publication om teruggegeven conflictinformatie te beperken tot een specifieke publicatie. Dit geeft verwijderingsconflictinformatie terug die is opgeslagen bij de abonnee.