Wykrywanie konfliktów w replikacja równorzędna

replikacja transakcyjnej typu peer-to-peer służy do wstawiania, aktualizacji, lub usunąć dane w dowolnym węźle w topologii i zmian danych te będą propagowane do innych węzłów.Ponieważ istnieje możliwość zmiany danych w dowolnym węźle, zmiany danych w różnych węzłach może powodować konflikt ze sobą.Jeśli wiersz zostanie zmodyfikowany w więcej niż jeden węzeł, może spowodować konflikt lub nawet w przypadku aktualizowania utracone po wierszu są propagowane do innych węzłów.

replikacja równorzędna w SQL Server 2008 wprowadzenie do opcji, aby włączyć wykrywanie konfliktów między topologia typu peer-to-peer. Ta opcja może zapobiec problemy, które są powodowane przez niewykryte konflikty, łącznie z utracone aktualizacji i zachowania aplikacji niespójne.Opcja ta jest włączona domyślnie zmiany powodujące konflikt jest traktowana jako błąd krytyczny, która powoduje błąd agenta dystrybucji.W przypadku wystąpienia konfliktu topologii pozostaje w stanie niespójnym, dopóki nie można rozwiązać konflikt i danych odbywa się zgodne w topologii.

Uwaga

Aby uniknąć potencjalnych niespójność danych, upewnij się, że należy unikać konfliktów w topologii typu peer-to-peer, nawet w przypadku włączone wykrywanie konfliktów.W celu zapewnienia, że operacje zapisu dla konkretnego wiersza są wykonywane na tylko jeden węzeł, aplikacji, które uzyskania dostępu do danych i ich zmieniania należy podzielić na partycje wstawiania, aktualizować i usuwać operacji.Tej partycjonowanie daje pewność, że modyfikacje dla danego wiersza, który jest z jednego węzła są synchronizowane ze wszystkimi innymi węzłami w topologii przed wiersz jest modyfikowany przez inny węzeł.Jeśli aplikacja wymaga możliwości rozpoznawania i wykrywanie konfliktów zaawansowanych, za pomocą replikacja łączenia.Aby uzyskać więcej informacji zobacz Omówienie replikacja łączenia i Wykrywanie i rozwiązywanie konfliktów replikacja korespondencji seryjnej.

Wykrywanie konfliktów i zrozumienie konfliktów

Zmiany dokonane na tym samym wierszu przez różne aplikacje w jednej bazie danych, nie powodują konflikt.Dzieje się tak, ponieważ transakcje są szeregowane i blokady są używane do obsługi równoległych zmian.W asynchronicznej systemu rozproszonego takich jak replikacja równorzędna transakcje działają niezależnie na każdym węźle; i nie istnieje mechanizm do serializacji transakcji przez wiele węzłów.Protokół zatwierdzanie dwufazowe podobnie jak może zostać wykorzystana, ale ma to wpływ na wydajność znacznie.

W systemach, takich jak replikacja równorzędna konflikty nie są wykrywane, gdy zmiany są zatwierdzone na poszczególnych elementów równorzędnych.Zamiast tego że są wykrywane, gdy te zmiany są replikowane i na innych partnerach.W przypadku replikacja równorzędna konflikty są wykrywane przez procedur przechowywanych, które Zastosuj zmiany do każdego węzła, na podstawie kolumna ukryte w każdej tabela opublikowane.W tej kolumnie ukryte przechowuje identyfikator, który łączy ID autora określone dla każdego węzła i wersja wiersza.Podczas synchronizacji agenta dystrybucji wykonuje procedury dla każdej tabela.Te procedury mają zastosowanie, wstawiania, aktualizacji i operacji usuwania z innych partnerach.Jeśli w jednej z procedur wykryje konflikt odczytuje wartość kolumna ukryte, wywołuje błąd 22815, który ma poziom ważności 16:

Wykryto konflikt typu '% s' na element równorzędny %d między elementu równorzędnego: %d (przychodzące), identyfikator transakcji %s i elementu równorzędnego: %d (na dysku), identyfikator transakcji %s

Domyślnie ten błąd powoduje, że Agent dystrybucji zatrzymać zastosowanie zmiany do tego węzła.Aby uzyskać informacje dotyczące sposobu obsługi konfliktów, które zostały wykryte zobacz temat "Obsługa konflikty" w dalszej części tego tematu.

Uwaga

Ukryta kolumna jest możliwy tylko przez użytkownika, który jest zalogowany za pośrednictwem dedykowany administrator połączenia (DAC).Aby uzyskać informacje na temat DAC zobacz Using a Dedicated Administrator Connection.

replikacja równorzędna wykrywa następujące konflikty:

  • Wstaw wstawiania

    Wszystkie wiersze w każdej tabela uczestniczących w replikacja równorzędna są unikatowo identyfikowane za pomocą wartości klucz podstawowy.Konflikt wstawiania wstawiania występuje, gdy wiersz z tą samą wartością klucz został wstawiony w więcej niż jeden węzeł.

  • Aktualizacja aktualizacji

    Występuje, gdy ten sam wiersz został zaktualizowany przez więcej niż jeden węzeł.

  • Wstawienie, aktualizacja

    Występuje, jeśli wiersz został zaktualizowany przez jeden węzeł, ale ten sam wiersz został usunięty i następnie ponownie wstawić w innym węźle.

  • Wstawianie-przycisk Usuń

    Występuje, jeśli wiersz został usunięty przez jeden węzeł, ale ten sam wiersz został usunięty i następnie ponownie wstawić w innym węźle.

  • Usuwanie aktualizacji

    Występuje, jeśli wiersz został zaktualizowany przez jeden węzeł, ale ten sam wiersz został usunięty przez inny węzeł.

  • Usuń-przycisk Usuń

    Występuje, gdy wiersz został usunięty przez więcej niż jeden węzeł.

Włączanie wykrywanie konfliktów

Aby skorzystać z opcji wykrywanie konfliktów, we wszystkich węzłach musi być uruchomiony SQL Server 2008 lub jego nowszej wersja i wykrywania musi być włączony dla wszystkich węzłów. W SQL Server 2008 i nowsze wersje domyślnie wykrywanie konfliktów jest włączony w SQL Server Management Studio. Zaleca się, że jest włączone, nawet w scenariuszach, w którym użytkownik nie będzie składać już konflikty wykrywania.Wykrywanie konfliktów może być włączone i wyłączone przy użyciu Management Studio lub Transact-SQL procedury przechowywane:

Obsługa konfliktów

W przypadku wystąpienia konfliktu w replikacja równorzędna jest wywoływane alert wykrywania konfliktu typu peer-to-peer.Firma Microsoft zaleca, aby skonfigurować ten alert, aby otrzymasz powiadomienie, gdy wystąpi konflikt.Aby uzyskać więcej informacji na temat alertów zobacz Using Alerts for Replication Agent Events.

Po Agent dystrybucji wywoływane jest zatrzymywany i alert, użyj jednej z następujących podejść do obsługi konfliktach, które wystąpiły:

  • Ponownie zainicjować węzła, w którym wykryto konflikt z kopia zapasowa z węzła, który zawiera dane wymagane (metoda zalecana).Metoda taka daje pewność, że dane są w stanie spójnym.Aby uzyskać więcej informacji zobacz procedurę dodawania węzła do topologii w Jak Konfigurowanie typu peer-to-peer transakcyjne replikacja (replikacja programowania języka Transact-SQL).

  • Ponów próbę synchronizacji węzła, włączając Agent dystrybucji kontynuować zastosować zmiany:

    1. wykonać sp_changepublication: Określ p2p_continue_onconflict parametru właściwość @ i true dla parametru @ wartości.

    2. Ponowne uruchomienie agenta dystrybucji.

    3. Sprawdź konflikty, które zostały wykryte za pomocą Podglądu konfliktów i określić wiersze, które zostały typu konfliktów i zwycięzcy.Konflikt został rozwiązany, na podstawie wartości Identyfikator autora, określony przez użytkownika podczas konfigurowania: wierszy, które powstały w węźle z najwyższym IDENTYFIKATOREM zwycięża konflikt. Aby uzyskać więcej informacji zobacz Jak Wyświetl konflikty danych transakcyjne publikacji (SQL Server Management Studio).

    4. Uruchomienie sprawdzania poprawności dla zapewnienia wiersze będące w konflikcie zbieżność poprawnie.Aby uzyskać więcej informacji zobacz Validating Replicated Data.

      Uwaga

      Jeśli dane są niezgodne po wykonaniu tego kroku, należy ręcznie zaktualizować wiersze na węźle, który ma najwyższy priorytet, a następnie zezwolić na zmiany są propagowane z węzła.Jeśli nie dalsze konfliktowe zmiany w topologii, wszystkie węzły będzie można przełączyć do stanu spójności.

    5. wykonać sp_changepublication: Określ p2p_continue_onconflict parametru właściwość @ i false dla parametru @ wartości.