Rozwiązywanie konfliktów w replikacji Merge

Dotyczy:SQL Server

Konflikty w replikacji merge są rozwiązywane na podstawie resolvera określonego dla każdego artykułu. Domyślnie konflikty są rozwiązywane bez potrzeby interwencji użytkownika. Jednak konflikty można oglądać, a wynik rozwiązania zmieniać w Microsoft Replication Conflict Viewer.

Dane o konfliktach są dostępne w narzędziu Replication Conflict Viewer przez okres określony dla okresu przechowywania konfliktów (domyślnie 14 dni). Aby ustalić okres utrzymania konfliktu, należy jednak:

Domyślnie informacje o konflikcie są przechowywane:

  • Jeśli poziom zgodności publikacji wynosi 90RTM lub wyższy, u wydawcy i subskrybenta.
  • W programie Publisher, jeśli poziom zgodności publikacji jest niższy niż 80RTM.
  • W programie Publisher, jeśli subskrybenci korzystają z programu SQL Server Compact. Nie można przechowywać danych konfliktów w subskrybentach programu SQL Server Compact.

Przechowywanie informacji o konfliktach jest sterowane przez właściwość publikacji conflict_logging. Więcej informacji można znaleźć w sp_addmergepublication (Transact-SQL) oraz sp_changemergepublication (Transact-SQL).

Konflikty można również rozwiązywać interaktywnie podczas synchronizacji za pomocą Microsoft Interactive Resolver. Funkcja Interactive Resolver jest dostępna w Menedżerze synchronizacji systemu Microsoft Windows. Aby uzyskać więcej informacji, zobacz Synchronizowanie subskrypcji przy użyciu programu Windows Synchronization Manager (Windows Synchronization Manager).

Rozwiązywanie konfliktów

  1. Połącz się z Publisher (lub Subscriber, jeśli to odpowiednie) w Microsoft SQL Server Management Studio, a następnie rozwiń węzeł serwera.

  2. Rozwiń folder Replikacja , a następnie rozwiń folder Publikacje lokalne .

  3. Kliknij prawym przyciskiem myszy publikację, dla której chcesz wyświetlić konflikty, a następnie kliknij pozycję Wyświetl konflikty.

    Note

    Jeśli określiłeś wartość 'subscriber' dla właściwości conflict_logging , opcja menu View Conflicts nie jest dostępna. Aby zobaczyć konflikty, zacznij ConflictViewer.exe od wiersza poleceń. Domyślnie ConflictViewer.exe znajduje się w następującym katalogu: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Aby uzyskać listę ważnych parametrów startowych, uruchom ConflictViewer.exe -?.

  4. W oknie dialogowym Wybieranie tabeli konfliktów wybierz bazę danych, publikację i tabelę, dla której mają być wyświetlane konflikty.

  5. W podglądzie konfliktów replikacji można wykonywać następujące czynności:

    • Filtruj wiersze za pomocą przycisków po prawej stronie górnej siatki.

    • Wybierz wiersz w górnej siatce, aby wyświetlić informacje o tym wierszu w dolnej siatce.

    • Wybierz jeden lub więcej wierszy w górnej siatce, a następnie kliknij Usuń, co jest równoważne kliknięciu przycisku Wyślij Zwycięzcę (bez żadnych zmian w danych).

    • Kliknij przycisk właściwości (...), aby wyświetlić więcej informacji na temat kolumny zaangażowanej w konflikt.

    • Edytuj dane w kolumnie Zwycięzca konfliktu lub Przegrany konfliktu przed ich przesłaniem (dane są dostępne tylko do odczytu, jeśli kolumna jest szara).

    • Kliknij Zatwierdź zwycięzcę, aby zaakceptować wiersz oznaczony jako zwycięzca konfliktu.

    • Kliknij Submit Loser, aby nadpisać rozwiązanie i przekazać wartość oznaczoną jako przegrany konfliktu do wszystkich węzłów w topologii.

    • Wybierz pozycję Zarejestruj szczegóły tego konfliktu , aby rejestrować dane powodujące konflikt do pliku. Aby określić lokalizację pliku, wskaż menu Widok , a następnie kliknij pozycję Opcje. Wprowadź wartość lub kliknij przycisk przeglądania (...), a następnie przejdź do odpowiedniego pliku. Kliknij przycisk OK , aby zamknąć okno dialogowe Opcje .

  6. Zamknij podgląd konfliktów replikacji.

Wyświetlanie informacji o konflikcie

Gdy konflikt jest rozwiązywany w replikacji scalania, dane z przegranego wiersza są zapisywane do tabeli konfliktów. Dane konfliktowe można oglądać programowo za pomocą procedur przechowywanych w replikacji. Aby uzyskać więcej informacji, zobacz Zaawansowane wykrywanie i rozwiązywanie konfliktów replikacji scalania.

  1. Na serwerze publikującym, w bazie danych publikacji, wykonaj sp_helpmergepublication. Zwróć uwagę na wartości następujących kolumn w zbiorze wyników:

    • centralized_conflicts - 1 oznacza, że wiersze konfliktu są przechowywane na Publisher, a 0 oznacza, że wiersze konfliktu nie są przechowywane na Publisher.

    • decentralized_conflicts - 1 oznacza, że wiersze konfliktowe są przechowywane u Subskrybenta, a 0 wskazuje, że wiersze konfliktu nie są przechowywane u Subskrybenta.

      Note

      Zachowanie rejestrowania konfliktów w publikacji scalającej jest ustawiane za pomocą parametru @conflict_logging procedury sp_addmergepublication. Użycie tego @centralized_conflicts parametru zostało wycofane.

    Poniższa tabela opisuje wartości tych kolumn na podstawie wartości określonej dla @conflict_logging.

    @conflict_logging wartość centralized_conflicts zdecentralizowane_konflikty
    wydawca 1 0
    subskrybent 0 1
    Oba 1 1
  2. U Wydawcy w bazie danych publikacji lub u Subskrybenta w bazie danych subskrypcji wykonaj sp_helpmergearticleconflicts. Określ wartość parametru @publication, aby zwracać tylko informacje o konfliktach dotyczące artykułów należących do określonej publikacji. To zwraca informacje z tabeli konfliktów dla artykułów zawierających konflikty. Zwróć uwagę na wartość conflict_table dla wszelkich interesujących artykułów. Jeśli wartość conflict_table dla artykułu jest równa NULL, w danym artykule wystąpiły tylko konflikty związane z usunięciem.

  3. (Opcjonalnie) Przejrzyj spory konfliktowe pod kątem interesujących artykułów. W zależności od wartości centralized_conflicts i decentralized_conflicts z kroku 1, wykonaj jedno z następujących kroków:

    • U wydawcy, w bazie danych publikacji, wykonaj sp_helpmergeconflictrows. Określ tabelę konfliktową dla artykułu (od kroku 1) dla @conflict_table. (Opcjonalnie) Określ wartość @publication, aby ograniczyć zwracane informacje o konfliktach do określonej publikacji. Zwraca dane wiersza oraz inne informacje dotyczące przegranego wiersza.

    • Na stronie Subskrybera w bazie subskrypcji wykonaj sp_helpmergeconflictrows. Określ tabelę konfliktów dla artykułu z kroku 1 dla @conflict_table. Zwraca to dane wiersza oraz inne informacje dotyczące wiersza, który przegrał.

Konflikt, w którym usunięcie się nie powiodło

  1. Na serwerze publikującym, w bazie danych publikacji, wykonaj sp_helpmergepublication. Zwróć uwagę na wartości następujących kolumn w zbiorze wyników:

    • centralized_conflicts - 1 oznacza, że wiersze konfliktu są przechowywane na Publisher, a 0 oznacza, że wiersze konfliktu nie są przechowywane na Publisher.

    • decentralized_conflicts - 1 oznacza, że wiersze konfliktowe są przechowywane u Subskrybenta, a 0 wskazuje, że wiersze konfliktu nie są przechowywane u Subskrybenta.

      Note

      Zachowanie logowania konfliktów w publikacji merge jest ustawiane przy użyciu parametru @conflict_loggingsp_addmergepublication. Użycie tego @centralized_conflicts parametru zostało wycofane.

  2. U Wydawcy w bazie danych publikacji lub u Subskrybenta w bazie danych subskrypcji wykonaj sp_helpmergearticleconflicts. Określ wartość dla parametru @publication, aby zwracać informacje z tabeli konfliktów tylko dla tych artykułów, które należą do określonej publikacji. To zwraca informacje z tabeli konfliktów dla artykułów zawierających konflikty. Zwróć uwagę na wartość source_object dla wszelkich interesujących artykułów. Jeśli wartość conflict_table dla artykułu jest równa NULL, w danym artykule wystąpiły tylko konflikty związane z usunięciem.

  3. (Opcjonalnie) Przeglądaj informacje o konflikcie pod kątem konfliktów usuwania. W zależności od wartości centralized_conflicts i decentralized_conflicts z kroku 1, wykonaj jedno z następujących kroków:

    • Na Publisher w bazie publikacji wykonaj sp_helpmergedeleteconflictrows. Określ nazwę tabeli źródłowej (z kroku 1), na której wystąpił konflikt dla @source_object. (Opcjonalnie) Określ wartość @publication, aby ograniczyć zwracane informacje o konfliktach do określonej publikacji. To zwraca informacje o konflikcie usuwania przechowywane u Wydawcy.

    • W sekcji Subskrybent w bazie subskrypcji wykonaj sp_helpmergedeleteconflictrows. Określ nazwę tabeli źródłowej (z kroku 1), na której wystąpił konflikt dla @source_object. (Opcjonalnie) Określ wartość @publication, aby ograniczyć zwracane informacje o konfliktach do określonej publikacji. To zwraca informacje o konfliktach związanych z usuwaniem przechowywane u Subskrybenta.