Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
W tym temacie opisano różne kombinacje metod wykrywania konfliktów i rozwiązywania konfliktów możliwych podczas korzystania z rekordów logicznych. Konflikt w replikacji scalającej występuje, gdy te same dane zostaną zmienione w więcej niż jednym węźle lub gdy podczas replikowania zmian replikacja scalająca napotka określone typy błędów, takie jak naruszenie więzów integralności. Aby uzyskać więcej informacji na temat wykrywania i rozwiązywania konfliktów, zobacz Zaawansowane wykrywanie i rozwiązywanie konfliktów w replikacji scalającej.
Aby określić poziom śledzenia konfliktów i rozwiązywania konfliktów dla artykułu, zobacz Modyfikowanie opcji replikacji typu merge.
Wykrywanie konfliktów
Sposób wykrywania konfliktów dla rekordów logicznych jest określany przez dwie właściwości artykułu: column_tracking i logical_record_level_conflict_detection. SQL Server 2005 (9.x) i nowsze wersje obsługują również wykrywanie na poziomie rekordów logicznych.
Właściwość artykułu logical_record_level_conflict_detection może być ustawiona na wartość TRUE lub FALSE. Wartość należy ustawiać tylko dla artykułu nadrzędnego najwyższego poziomu i będzie ona ignorowana w artykułach podrzędnych. Jeśli ta wartość to FAŁSZ, replikacja scalania wykrywa konflikty tak jak w poprzednich wersjach programu SQL Server, wyłącznie na podstawie wartości właściwości column_tracking dla artykułu. Jeśli ta wartość jest ustawiona na TRUE, replikacja scalania zignoruje właściwość column_tracking artykułu i wykryje konflikt, jeśli zmiany zostaną wprowadzone gdziekolwiek w rekordzie logicznym. Rozważmy na przykład ten scenariusz:
Konflikt jest wykrywany, jeśli dwóch użytkowników zmienia dowolne wartości rekordu logicznego Customer2 w tabelach Customers, Orders lub OrderItems . Ten przykład dotyczy zmian wprowadzonych za pomocą instrukcji UPDATE, ale konflikt można również wykryć na podstawie zmian wprowadzonych za pomocą instrukcji INSERT lub DELETE.
Rozwiązywanie konfliktów
Domyślnie replikacja scalania używa logiki opartej na priorytecie do rozwiązywania konfliktów. Jeśli w dwóch bazach danych subskrybentów zostanie wprowadzona powodująca konflikt zmiana, pierwszeństwo ma zmiana wprowadzona przez subskrybenta z wyższym priorytetem subskrypcji, a jeśli priorytet jest taki sam, pierwszeństwo ma zmiana, która jako pierwsza dotrze do Wydawcy. W przypadku wykrywania na poziomie wiersza i na poziomie kolumny cały zwycięski wiersz zawsze zastępuje przegrany wiersz.
Właściwość artykułu logical_record_level_conflict_resolution może być ustawiona na wartość TRUE lub FALSE. Wartość powinna być ustawiona tylko dla artykułu nadrzędnego najwyższego poziomu i będzie ignorowana w artykułach podrzędnych. Jeśli wartość wynosi TRUE, cały wygrywający rekord logiczny zastępuje przegrywający rekord logiczny. Jeśli ma wartość FALSE, poszczególne wygrywające wiersze mogą pochodzić od różnych Subskrybentów lub Wydawców. Na przykład subskrybent A może wygrać konflikt w wierszu z tabeli Orders (Zamówienia ), a subskrybent B może wygrać w powiązanym wierszu z tabeli OrderItems . Wynik jest rekordem logicznym z wierszem Orders z subskrybenta A i wierszem OrderItems z subskrybenta B.
Interakcja ustawień rozwiązywania konfliktów i wykrywania
Wynik konfliktów zależy od interakcji ustawień wykrywania konfliktów i rozwiązywania problemów. W poniższych przykładach przyjęto założenie, że jest używane rozwiązywanie konfliktów oparte na priorytetach. W przypadku korzystania z rekordów logicznych możliwości są następujące:
Wykrywanie na poziomie wiersza lub kolumny, rozpoznawanie na poziomie wiersza
Wykrywanie na poziomie kolumny, rozpoznawanie rekordów logicznych
Wykrywanie na poziomie wiersza, rozpoznawanie rekordów logicznych
Wykrywanie rekordów logicznych, rozpoznawanie rekordów logicznych
Wykrywanie na poziomie wiersza lub kolumny, rozdzielczość na poziomie wiersza
W tym przykładzie publikacja jest skonfigurowana przy użyciu następujących funkcji:
column_tracking ma wartość TRUE lub FALSE
logical_record_level_conflict_detection ma wartość FALSE
logical_record_level_conflict_resolution ma wartość FALSE
W takim przypadku wykrywanie jest na poziomie wiersza lub kolumny, a rozdzielczość jest na poziomie wiersza. Te ustawienia służą do wykorzystania faktu, że wszystkie zmiany w rekordzie logicznym są replikowane jako jedna jednostka, ale bez wykrywania ani rozwiązywania konfliktów na poziomie rekordu logicznego.
Wykrywanie na poziomie kolumny, rozpoznawanie rekordów logicznych
W tym przykładzie publikacja jest skonfigurowana przy użyciu następujących funkcji:
column_tracking ma wartość TRUE
logical_record_level_conflict_detection ma wartość FALSE
logical_record_level_conflict_resolution ma wartość TRUE
Publisher i Subskrybent zaczynają się od tego samego zestawu danych, a rekord logiczny jest definiowany między tabelami zamówień i klientów. Publisher zmienia kolumnę custcol1 w tabeli customers i ordercol1 w tabeli orders. Subskrybent zmienia custcol1 w tym samym wierszu tabeli customers oraz kolumnę ordercol2 w tym samym wierszu tabeli orders. Zmiany w tej samej kolumnie w tabeli klienta powodują konflikt, ale zmiany w tabeli zamówień nie są w konflikcie.
Ponieważ konflikty są rozwiązywane na poziomie rekordu logicznego, zwycięskie zmiany wprowadzone w Publikatorze zastępują zmiany wprowadzone w tabelach Subskrybenta w trakcie przetwarzania replikacji.
Wykrywanie na poziomie wiersza, rozpoznawanie rekordów logicznych
W tym przykładzie publikacja jest skonfigurowana przy użyciu następujących funkcji:
column_tracking ma wartość FALSE
logical_record_level_conflict_detection ma wartość FALSE
logical_record_level_conflict_resolution ma wartość TRUE
Publisher i Subscriber zaczynają z tym samym zestawem danych. Publisher zmienia kolumnę custcol1 w tabeli customers. Subskrybent zmienia kolumnę custcol2 w tabeli customers i kolumnę ordercol2 w tabeli orders. Zmiany w tym samym wierszu tabeli customers powodują konflikt, ale zmiany Subskrybenta w tabeli orders nie powodują konfliktu.
Ponieważ konflikty są rozwiązywane na poziomie rekordu logicznego, podczas synchronizacji zwycięskie zmiany wprowadzone w Publikatorze zastępują zmiany wprowadzone w tabelach Subskrybenta.
Wykrywanie rekordów logicznych, rozpoznawanie rekordów logicznych
W tym przykładzie publikacja jest skonfigurowana przy użyciu następujących funkcji:
logical_record_level_conflict_detection jest ustawione na TRUE
logical_record_level_conflict_resolution ma wartość TRUE
Publisher i Subskrybent zaczynają z tym samym zestawem danych. Publisher zmienia kolumnę custcol1 w tabeli customers. Subskrybent zmienia kolumnę ordercol1 w tabeli orders . Nie ma żadnych zmian w tym samym wierszu lub kolumnach, ale ponieważ zmiany są wprowadzane w tym samym rekordzie logicznym dla custid=1, zmiany są wykrywane jako konflikt na poziomie rekordu logicznego.
Ponieważ konflikty są również rozwiązywane na poziomie rekordu logicznego, podczas synchronizacji zwycięska zmiana wprowadzona w Publisher zastępuje zmiany wprowadzone w tabelach Subskrybent.