Wykrywanie konfliktów w replikacji typu Peer-to-Peer
Peer-to-peer replikacja transakcyjna umożliwia wstawiania, aktualizacji, lub usuwać dane w dowolnym węźle w topologii i zmiany danych są propagowane do innych węzłów.Ponieważ zmiany danych w dowolnym węźle, zmiany danych w różnych węzłach może powodować konflikt z sobą.Jeśli wiersz zostanie zmodyfikowany w więcej niż jeden węzeł, może spowodować konflikt lub nawet aktualizacji utracone po wierszu są propagowane do innych węzłów.
Replikacja typu peer-to-peer w SQL Server 2008 wprowadzono opcję, aby włączyć wykrywanie konfliktów między topologii peer-to-peer.Ta opcja może pomóc uniknąć problemów powodowanych przez niewykryte konfliktów, włączając w to zachowanie aplikacji niespójne i utraty aktualizacji.Ta opcja jest włączona domyślnie zmiany powodujące konflikt traktowany jest jako krytyczny błąd powodujący niepowodzenie agenta dystrybucji.W zdarzenie konfliktu, topologii pozostaje w stanie niespójnym, dopóki konflikt został rozwiązany i danych będzie spójna w topologii.
Ostrzeżenie
Aby uniknąć potencjalnych niespójność danych, upewnij się, że uniknąć konfliktów w topologii peer-to-peer, nawet z włączone wykrywanie konfliktów.W celu zapewnienia, że operacje zapisu dla konkretnego wiersza są wykonywane na tylko jeden węzeł, Wstaw partycje aplikacji, które dostępu i zmiany danych, aktualizowanie i usuwanie operacji.To partycjonowanie zapewnia, że modyfikacje do danego wiersza, który pochodzące od jednego węzła są synchronizowane z innymi węzłami w topologii przed wiersz zostanie zmodyfikowany przez inny węzeł.Jeśli aplikacja wymaga wykrywanie konfliktów wyrafinowane i możliwości rozpoznawania, użyj replikacja scalająca.Aby uzyskać więcej informacji, zobacz Omówienie replikacji scalania i Wykrywanie i rozwiązywanie konfliktów replikacji scalania.
Opis konfliktów i wykrywanie konfliktów
Zmiany wprowadzone do tego samego wiersza przez różne aplikacje w jednej bazie danych nie powoduje konfliktu.Jest tak, ponieważ transakcje są szeregowane i blokad są używane do obsługi równoległych zmian.Asynchroniczne rozproszonego systemu takie jak replikacja równorzędna transakcje działają niezależnie na każdym węźle; i nie istnieje mechanizm serializować transakcji w różnych węzłach.Podobnie jak protokół zatwierdzanie dwufazowe mogą zostać wykorzystane, ale ma to wpływ na wydajność znacznie.
W systemach takich jak replikacja równorzędna konflikty nie są wykrywane podczas zmiany są zobowiązane na poszczególne elementy równorzędne.Zamiast tego są one wykryte podczas te zmiany są replikowane i stosowane na innych partnerach.W przypadku replikacja równorzędna konflikty są wykrywane przez procedury przechowywane, które dotyczą zmian każdego węzła, na podstawie ukryte kolumna w każdej tabela opublikowane.Identyfikator, który łączy przechowuje to ukryta kolumna zleceniodawcy identyfikator określony dla każdego węzła i wersja wiersza.Podczas synchronizacji Agent dystrybucji wykonuje procedur dla każdej tabela.Te procedury mają zastosowanie, insert, update i operacji usuwania z innymi komputerami.Jeśli jedną z procedur wykryje konflikt, gdy go odczytuje wartość kolumna ukryte, podnosi błąd 22815 ma poziom ważności 16:
A conflict of type '%s' was detected at peer %d between peer %d (incoming), transaction id %s and peer %d (on disk), transaction id %s
Domyślnie ten błąd powoduje, że Agent dystrybucji zaprzestanie stosowania zmian do tego węzła.Aby uzyskać informacje dotyczące sposobu obsługi konflikty, które są wykrywane zobacz "Konflikty obsługi" w dalszej części tego tematu.
Ostrzeżenie
Ukryta kolumna jest możliwy tylko przez użytkownika, który jest zalogowany za pośrednictwem dedykowanej administratora połączenia (DAC).Aby uzyskać informacje dotyczące DAC, zobacz Za pomocą dedykowanego połączenia administracyjnego.
Replikacja typu peer-to-peer wykrywa następujące konflikty:
Wstaw Wstaw
Wszystkie wiersze w każdej tabela uczestniczących w replikacja równorzędna są unikatowo identyfikowane za pomocą klucz podstawowy wartości.Wstaw Wstaw konflikt występuje, gdy wiersz o tej samej wartości klucz został wstawiony w więcej niż jeden węzeł.
Aktualizacja, aktualizacja
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 jednego węzła, ale ten sam wiersz został usunięty i następnie ponownie wstawić w innym węźle.
Wstaw delete
Występuje, gdy wiersz został usunięty przez jednego węzła, 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 innego węzła.
Usuń Usuń
Występuje, gdy wiersz został usunięty przez więcej niż jeden węzeł.
Włączenie wykrywania konfliktów
Aby użyć wykrywanie konfliktów, we wszystkich węzłach musi być uruchomiony SQL Server 2008 lub 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ę, aby mieć włączone, nawet w scenariuszach, w których nie oczekuje konflikty wykrywania.Wykrywanie konfliktów może być włączone i wyłączone przy użyciu Management Studio lub Transact-SQL procedur przechowywanych:
Można włączać i wyłączać wykrywanie w Management Studio przy użyciu Opcje subskrypcji strona Właściwości publikacji okno dialogowe lub Konfigurowanie topologii strona Kreatora konfiguracji Peer-to-Peer topologii.Aby uzyskać więcej informacji, zobacz Jak Konfigurowanie wykrywania konfliktów dla typu Peer-to-Peer replikacji transakcyjnej (SQL Server Management Studio).
Jeśli wykrywanie konfliktów można skonfigurować za pomocą Management Studio, Agent dystrybucji jest skonfigurowany do zaprzestanie stosowania zmian, gdy wykryje konflikt.
Można również włączać i wyłączać wykrywanie za pomocą następujących procedur przechowywanych: sp_addpublication lub sp_configure_peerconflictdetection.Aby uzyskać więcej informacji, zobacz Jak Konfigurowanie wykrywania konfliktów replikacji transakcyjnej Peer-to-Peer (Programowanie replikacji Transact-SQL).
Wykrywanie konfliktów można skonfigurować za pomocą procedur przechowywanych, można określić, czy Agent dystrybucji należy przerwać stosowanie zmian, gdy wykryje konflikt.Domyślnie jest dla agenta zatrzymać.Zaleca się, aby użyć ustawienia domyślnego.
Konfliktów
Gdy występuje konflikt w replikacja równorzędna, Peer-to-peer conflict detection alert jest wywoływane.Zaleca się, aby skonfigurować ten alert, tak, aby jest powiadamiany, gdy wystąpi konflikt.Aby uzyskać więcej informacji dotyczących alertów, zobacz Za pomocą alertów dla zdarzenia agenta replikacji.
Po agenta dystrybucji zatrzymuje i alert jest wywoływane, użyj jednej z następujących podejść do obsługi konfliktach, które wystąpiły:
Ponownie zainicjować węzła, gdzie wykryto konflikt z kopia zapasowa węzeł, który zawiera wymagane dane (zalecane podejście).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 Peer-to-Peer replikacji transakcyjnej (Programowanie replikacji Transact-SQL).
Ponów próbę synchronizacji węzła, włączając agenta dystrybucji na dalsze stosowanie zmian:
Wykonanie sp_changepublication: Określ 'p2p_continue_onconflict' dla @property parametr i true dla @value parametru.
Uruchom ponownie agenta dystrybucji.
Sprawdź konflikty, które zostały wykryte przy użyciu Podgląd konfliktów i określić wiersze, które były zaangażowane, typ konflikt i zwycięzcą.Konflikt został rozwiązany, na podstawie wartości Identyfikatora zleceniodawcy określonej podczas konfiguracja: wiersz, który pochodzi od węzła WINS najwyższy identyfikator konfliktu.Aby uzyskać więcej informacji, zobacz Jak Wyświetl konflikty danych transakcyjnych publikacji (SQL Server Management Studio).
Uruchom sprawdzanie poprawności zapewniające poprawnie zbieżność sprzecznych wierszy.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności replikowanych danych.
Ostrzeżenie
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żeli istnieją nie dalsze konfliktowe zmiany w topologii, wszystkie węzły zostaną doprowadzone do stanu spójności.
Wykonanie sp_changepublication: Określ 'p2p_continue_onconflict' dla @property parametr i false dla @value parametru.