Udostępnij za pośrednictwem


Data at the Publisher and Subscriber Do Not Match

Dane Wydawca i subskrybent jest uważany za jednolitego (w innych danych nie pasuje do słowa) jeśli:

  • Istnieją różne liczby wierszy niż subskrybent w Wydawca, a nie jest filtrowany publikacja.Jeśli w publikacja zastosowano filtr, to można się spodziewać że różni się liczby wierszy.

  • Dane w co najmniej jeden wiersz jest inny w zawartości Wydawca i subskrybent.

Wyjaśnienie

Dane Wydawca i subskrybent można jednolitego kilku powodów:

  • Dane są aktualizowane w subskrybent powinna być traktowana jako tylko do odczytu.baza danych subskrypcja powinna być traktowana jako tylko do odczytu, tylko w przypadku korzystania z replikacja łączenia replikacja transakcyjnej z subskrypcjami mogą być aktualizowane i replikacja transakcyjnej typu peer-to-peer.

  • Wyzwalacze są używane przez subskrybent.Wyzwalacze mogą modyfikować dane przez subskrybent i również uniemożliwić dane są aktualizowane w przypadku wyzwalacza wystawia ROLLBACK.

  • Skrypty są wykonywane przez replikację przez subskrybent, ale nie z Wydawca.

  • replikacja wykonanie procedura przechowywana transakcyjnych publikacja daje inne wyniki przez subskrybent.

  • Naruszeniach ograniczeń lub inne problemy z uniemożliwić wiersze są wstawiane, aktualizowane lub usunięty przez subskrybent.

Akcja użytkownika

Następujące akcje opisano sposób ustalania, jeśli dane są inne niż jednolitego oraz sposobów dostosowania go do wywoływania zbieżności:

  1. Określa, czy dane jest inne niż jednolitego za pomocą sprawdzania poprawności lub tablediff utility:

    • Jeśli Agent dystrybucji lub Scal Agent jest w stanie uruchomić, należy określić, czy brakuje danych przez uruchomienie sprawdzania poprawności binarnej suma kontrolna.Umożliwia także sprawdzenie poprawności liczby wierszy, ale ta metoda nie wyświetla różnice w zawartości danych.Aby uzyskać więcej informacji zobacz Validating Replicated Data.

    • Jeśli nie można uruchomić agenta dystrybucji lub korespondencji seryjnej programu Agent, określić, czy dane-jednolitego uruchamiając tablediff narzędzie.Aby uzyskać informacje dotyczące korzystania z tego narzędzia w zreplikowanych tabelach zobacz How to: Compare Replicated Tables for Differences (Replication Programming).

  2. Jeśli dane są inne niż jednolitego, można użyć tablediff Narzędzie generowanieTransact-SQL skrypt, aby przenieść dane do wywoływania zbieżności. Aby uzyskać więcej informacji zobacz Narzędzie tablediff.

Adresowanie przyczyną non-wywołania zbieżności

Następujące działania adresów przyczyn wymienionych w sekcji "Explanation":

  • Dane są aktualizowane przez subskrybent poza z replikacja:

    • Jeśli chcesz zezwolić użytkownikom na wstawianie, aktualizowanie i usuwanie danych przez subskrybent, za pomocą replikacja łączenia replikacja transakcyjnej z subskrypcjami mogą być aktualizowane i replikacja transakcyjnej typu peer-to-peer.Aby uzyskać więcej informacji zobacz Omówienie replikacja łączenia i Typy publikacja dla transakcji replikacja.

    • Jeśli chcesz uniemożliwić użytkownikom wstawianie, aktualizowanie i usuwanie danych przez subskrybent, należy utworzyć wyzwalacz dla każdej tabela, która zawiera wyraz, ROLLBACK i korzysta z opcji nie do replikacja (które wyzwalacz uniemożliwia wyzwalania, podczas której agent replikacja wykonuje operację).Na przykład:

      USE AdventureWorks
      GO
      CREATE TRIGGER prevent_user_dml
      ON Person.Address
      FOR INSERT, UPDATE, DELETE
      NOT FOR REPLICATION
      AS
      ROLLBACK
      

      Aby uzyskać więcej informacji zobacz CREATE TRIGGER (języka Transact-SQL) i Kontrolowanie ograniczenia tożsamości i wyzwalaczy z nie dla replikacja.

  • Wyzwalacze są używane przez subskrybent.Wyzwalacze subskrybent muszą być zarządzane prawidłowo tak, aby nie powodują one bez wywoływania zbieżności lub inne problemy:

    • Wyzwalacze tylko powinno powodować zmiany danych w subskrybent, za pomocą replikacja łączenia, replikacja transakcyjnej z subskrypcjami można aktualizować lub replikacja transakcyjnej typu peer-to-peer.Aby uzyskać więcej informacji zobacz Omówienie replikacja łączenia i Typy publikacja dla transakcji replikacja.

    • W wielu przypadkach wyzwalacze należy używać opcji nie do replikacja.Należy wziąć pod uwagę wyzwalacz, który wstawia dane do tabela śledzenia: gdy użytkownik wstawia wiersz pierwotnie jest odpowiednia dla wyzwalacza do ognia i wprowadzić wiersz do tabela śledzenia, ale wyzwalacz powinien nie ognia, gdy dane są replikowane do abonenta, ponieważ spowodowałoby to jest zbędne wiersz jest wstawiany w tabela śledzenia.

      Jeśli wyzwalacz zawiera instrukcja ROLLBACK wyzwalacz nie korzysta z opcji nie do replikacja, wiersze, które replikowano do subskrybent nie mogą być stosowane.

    • W przypadku replikacja transakcyjnej istnieją dodatkowe zagadnienia dotyczące ustawienie XACT_ABORT i za pomocą instrukcji zatwierdzanie i ROLLBACK w wyzwalacza.Aby uzyskać więcej informacji zobacz sekcję "Wyzwalaczy" Zagadnienia dotyczące replikacja transakcji.

  • Skrypty są wykonywane przez replikację przez subskrybent, ale nie z Wydawca.

    The @pre_snapshot_script and @post_snapshot_script parameters of sp_addpublication and sp_addmergepublication allow you to specify scripts to run before and after the migawka is applied.Aby uzyskać więcej informacji zobacz Wykonywanie skryptów przed i po migawka jest stosowana.. Procedura przechowywana sp_addscriptexec pozwala na wykonać skryptu podczas procesu synchronizacji.Aby uzyskać więcej informacji zobacz Jak wykonać skryptów podczas synchronizowania (Programowanie replikacja języka Transact-SQL).

    Skrypty te są zwykle używane do zadań administracyjnych, takich jak dodawanie logowania przez subskrybent.Jeśli skrypty są używane do aktualizowania danych w subskrybent powinna być traktowana jako tylko do odczytu, administrator musi zapewnić nie powoduje to bez wywoływania zbieżności.

  • replikacja wykonanie procedura przechowywana dla transakcyjnych publikacja daje inne wyniki przez subskrybent.

    Jeśli replikujesz wykonanie procedura przechowywana, definicja procedury są replikowane do subskrybent podczas inicjowania subskrypcja, gdy procedura jest wykonywana na Wydawca, replikacja wykonuje odpowiednie procedury przez subskrybent.Aby uzyskać więcej informacji zobacz Publikowanie wykonanie procedura przechowywana w transakcji replikacja.

    Jeżeli procedura przechowywana wykonuje inną akcję przez subskrybent lub działa na inne dane niż na Wydawca, może wystąpić brak zbieżności.Należy wziąć pod uwagę procedury, które dokonuje obliczeń i wstawianie danych w oparciu o obliczenie.Jeśli subskrybenta zastosowano filtr w taki sposób, że przy obliczaniu subskrybent opiera się na inne dane, wstawiony przez subskrybenta wynik może być odmienne lub insert nie mogą występować w każdym.

  • Naruszeniach ograniczeń lub inne problemy z uniemożliwić wiersze są wstawiane, aktualizowane lub usunięty przez subskrybent.

    Dla replikacja transakcyjnej naruszeniach ograniczeń są traktowane jako błędy; domyślnie powodują one agenta dystrybucji, aby zatrzymać synchronizację, gdy one wystąpią (Aby uzyskać informacje dotyczące pomijania tych błędów, zobacz Skipping Errors in Transactional Replication). replikacja łączenia naruszeniach ograniczeń są traktowane jak konflikty; są one rejestrowane, ale nie powodują one agenta korespondencji seryjnej, aby zatrzymać synchronizację.Dla obu typów replikacja ograniczenie naruszenia może prowadzić do innych niż zbieżności wstawiania, aktualizacji lub usuwania pomyślną na jednym węźle nie powiedzie się na inny.

    Po opublikowaniu tabela domyślne opcje schematu określić ograniczenia na klucz obcy i ograniczeń typu check należy utworzyć w bazie danych subskrypcja z zestaw opcji nie do replikacja.Jeśli aplikacja wymaga różne ustawienia dla ograniczeń, zmień opcje schematu.Aby uzyskać więcej informacji zobacz Jak Określ opcje schematu (SQL Server Management Studio) i Jak Określ opcje schematu (Programowanie replikacja języka Transact-SQL).

See Also

Concepts