Udostępnij za pośrednictwem


Danych nie jest dostarczana subskrybentom

Jeśli wydaje się, że danych nie jest są dostarczane subskrybentom, istnieją dwie przyczyny szeroki:

  • Dane nie są stosowane ze względu na filtrowanie problemu z agentem lub inny błąd replikacja.

  • Trwa usuwanie danych przez subskrybenta po jej zastosowaniu.

Wyjaśnienie

Istnieje kilka możliwych przyczyn dane nie są dostarczane subskrybentom:

  • Filtrowane tabela i żadne zmiany nie zostały do danego subskrybenta.

  • Jeden lub więcej agentów nie działają lub nie powiodły się zwracając błąd.

  • Transakcyjne subskrypcja został zainicjowany bez migawka i zaszły zmiany w Wydawca od momentu utworzenia publikacja.

  • Replikacja wykonanie procedura składowana transakcyjnych publikacja daje wyniki różnych przez subskrybenta.

  • procedura składowana WSTAW transakcyjnych artykuł zawiera warunek nie jest spełniony.

  • Dane są usuwane przez użytkownika, skrypt replikacja lub innej aplikacji.

  • Dane są usuwane przez wyzwalacz lub wyzwalacza zawiera instrukcja WYCOFYWANIA.

Akcja użytkownika

Przed próbą sprawdź, dlaczego danych nie jest dostarczana subskrybentom, zaleca się, Użyj sprawdzania poprawności lub tablediff narzędzie, aby zweryfikować, że brakuje wierszy:

  • Jeśli można uruchomić agenta dystrybucji lub scalić agenta określają, czy brak danych przez uruchomienie sprawdzania poprawności binarnej suma kontrolna.Można również użyć poprawności liczby wierszy, ale ta metoda nie wykazują różnic w zawartości danych.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności replikowanych danych.

  • Jeśli nie można uruchomić agenta dystrybucji lub scalić agenta ustalić, czy brak danych przez uruchomienie tablediff narzędzia.Aby uzyskać informacje dotyczące narzędzia na zreplikowanych tabelach, zobacz Jak Porównaj zreplikowanych tabelach różnic (Programowanie replikacji).

Adresowanie przyczyną brakujących danych

Następujące akcje adres z przyczyn wymienionych w "Wyjaśnieniem" sekcja:

  • Filtrowane tabela i żadne zmiany nie zostały do danego subskrybenta.

    Jest możliwe, wiersze Brak subskrybent nie zostały replikowane, ponieważ nie spełniają kryteriów filtrowania dla publikacja.Filtry statyczne obsługuje wszystkie typy replikacji i replikacja scalająca obsługuje również sparametryzowana filtry i łączyć filtrów.Aby uzyskać więcej informacji, zobacz Filtrowanie opublikowane dane.Jeśli jeden lub więcej artykułów w publikacja są filtrowane, wykonać następujące procedury i sprawdzić wartość klauzula filtru:

    Aby ustalić, czy spełniają dowolną brakuje wierszy kryteriów filtrowania, należy użyć klauzula filtru.Na przykład wykonanie klauzula filtr tabela na Wydawca i określić, czy zwracane dane pasują do danych przez subskrybenta.

  • Jeden lub więcej agentów nie działają lub nie powiodły się zwracając błąd:

  • Transakcyjne subskrypcja został zainicjowany bez migawka i zaszły zmiany w Wydawca od momentu utworzenia publikacja:

    • Jeśli włączysz publikacja zainicjowana z kopia zapasowa, zmiany do opublikowanej tabel są śledzone w baza danych publikacja dziennika zaraz po utworzeniu publikacja.Podczas inicjowania subskrypcja oczekujące zmiany są dostarczane do subskrybenta tak długo, jak długo będą nadal dostępne w baza danych dystrybucji.

    • W przeciwieństwie do inicjowania z kopia zapasowa, jeśli należy zainicjować subskrypcję przy użyciu replikacja obsługuje tylko , opcję użytkownik lub aplikacja musi zapewnić danych i schematu są poprawnie synchronizowane w czas dodać subskrypcję.Jeśli na przykład istnieje działanie w programie Publisher między czas danych i schematu są kopiowane do subskrybenta i czas w subskrypcja dodaje się, zmian wynikających z tej działalności nie może być replikowane do subskrybenta.

    Aby uzyskać więcej informacji, zobacz Inicjowanie transakcyjnych subskrypcję bez migawki.

  • Replikacja wykonanie procedura składowana transakcyjnych publikacja daje wyniki różnych przez subskrybenta.

    Jeśli replikujesz wykonanie procedura składowana procedury definicji jest replikowany subskrybenta podczas inicjowania subskrypcja; gdy procedura jest wykonywana w Wydawca, odpowiednią procedurą subskrybent wykonuje replikacja.Aby uzyskać więcej informacji, zobacz Publikowanie wykonanie procedury przechowywanej w replikacji transakcyjnej.

    Jeżeli procedura składowana wykonuje inną akcja subskrybent lub działa na różnych danych niż w Wydawca, zbieżności nie może występować.Należy rozważyć procedurę, która wykonuje obliczenia, a następnie wstawia dane oparte na obliczeniach.Jeśli subskrybenta jest filtrowane obliczeń subskrybent opiera się na inne dane, wstawiony przez subskrybenta wynik może być odmienne lub Wstaw nie może występować we wszystkich.

  • procedura składowana WSTAW transakcyjnych artykuł zawiera warunek nie jest spełniony.

    Domyślnie replikacja transakcyjna używa zestaw procedur przechowywanych propagowanie zmian do subskrybentów.Można również dostosować te procedury obejmowały logika biznesowa wymagana przez aplikację.Aby uzyskać więcej informacji, zobacz Określanie sposobu zmiany są propagowane transakcyjnych artykułów.Jeśli procedura składowana WSTAW zawiera warunek w jego logiki, która nie jest spełniony, Wstaw nie występuje.Należy rozważyć procedurę, która jest dostosowany do sprawdzenia wartości w tabeli (Tabela A) subskrybent przed zezwoleniem Wstaw w innej tabeli (Tabela B).Wartość nie jest dostępne w tabela a z powodu błędu lub ponieważ dane nie zostały jeszcze zreplikowane do tej tabela oczekiwano wiersza brakuje tabela B.

  • Trwa usuwanie danych przez użytkownika, skrypt replikacja lub innej aplikacji:

    • Jeśli chcesz zezwolić użytkownikom na usuwanie danych subskrybent Użyj replikacja scalająca, replikacja transakcyjna z subskrypcjami aktualizowalną lub replikacja transakcyjna peer-to-peer.Usuwa są propagowane do Wydawca, więc dane w Wydawca i abonenta ostatecznie zbieżne.Aby uzyskać więcej informacji, zobacz Omówienie replikacji scalania i Typy publikacji dla replikacji transakcyjnej.

    • Jeśli chcesz uniemożliwić użytkownikom usunięcie danych subskrybent Tworzenie wyzwalacza dla każdej tabela, która zawiera wyraz WYCOFYWANIA i używa opcji nie dla replikacja (która zapobiega wyzwalacz wyzwalania, gdy agent replikacja wykonuje operację).Na przykład:

      USE AdventureWorks2008R2;
      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 (Transact-SQL) i Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.

    • Replikacja pozwala na wykonać skryptów przed i po zastosowaniu migawka i podczas synchronizacji.@ Pre_snapshot_script i @ post_snapshot_script parametry sp_addpublication i sp_addmergepublication pozwalają określić skrypty uruchamiania przed i po zastosowaniu migawka.Aby uzyskać więcej informacji, zobacz Wykonywanie skryptów przed i po zastosowaniu migawki.procedura składowana sp_addscriptexec pozwala na wykonać skryptu podczas procesu synchronizacji.Aby uzyskać więcej informacji, zobacz Jak Wykonywanie skryptów podczas synchronizacji (Programowanie replikacji Transact-SQL).

      Skrypty te są zwykle używane dla zadania administracyjne, takie jak dodawanie logowania przez subskrybenta.Jeśli skrypty są używane do usuwania danych na subskrybent powinien być traktowany jako tylko do odczytu, administrator musi zapewnić, że bez wywoływania zbieżności nie powoduje.

  • Usunięcie danych przez wyzwalacz lub wyzwalacza zawiera instrukcja WYCOFYWANIA.

    Wyzwalacze subskrybent muszą być właściwie zarządzane tak, aby nie powodować-do zbieżności lub inne problemy:

    • Wyzwalacze tylko powinien powodować zmian danych na subskrybenta, za pomocą replikacja scalająca, replikacja transakcyjna z subskrypcjami aktualizowalną lub replikacja transakcyjna peer-to-peer.Aby uzyskać więcej informacji, zobacz Omówienie replikacji scalania i Typy publikacji dla replikacji transakcyjnej.

    • W wielu przypadkach wyzwalaczy, należy użyć opcji nie dla replikacji.Jeśli wyzwalacz zawiera WYCOFYWANIA instrukcja i wyzwalacz nie jest używana opcja nie dla replikacji, wiersze, które zostały zreplikowane abonent nie może być stosowane.

    • Dla replikacja transakcyjna, istnieją dodatkowe zagadnienia dotyczące ustawienie XACT_ABORT i za pomocą instrukcji i WYCOFYWANIA w wyzwalacza.Aby uzyskać więcej informacji zobacz sekcję "Wyzwalacze" sekcja Zagadnienia dotyczące replikacji transakcyjnej.

Zobacz także

Koncepcje