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:
Filtr statyczne migawka i publikacje transakcyjne: filter_clause kolumna zwrócone przez sp_helparticle (języka Transact-SQL).
Statyczne filtr lub sparametryzowanych filtr dla publikacji korespondencji seryjnej: subset_filterclause kolumna zwrócone przez sp_helpmergearticle (języka Transact-SQL).
Dołącz filtr dla publikacji korespondencji seryjnej: join_filterclause kolumna zwrócone przez sp_helpmergefilter (języka Transact-SQL).
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:
Są inicjowanie subskrypcja, upewnij się, że przed próbą zastosowania migawka z agentem dystrybucji lub scalić Agent zakończył agenta migawkę w publikacja.Jeśli próba zastosowania migawka przed jej zakończeniem, występuje następujący błąd: " migawka początkowa Dla publikacja"% s" nie jest jeszcze dostępne."
Dla replikacja transakcyjna, upewnij się, że Agent dystrybucji i Agent czytnik dziennika są uruchomione; do replikacja scalająca zapewnić seryjnej Agent jest uruchomiony.Aby uzyskać informacje dotyczące uruchamiania tych czynników, zobacz Jak Uruchamianie i zatrzymywanie Agent replikacji (SQL Server Management Studio) i Pojęcia dotyczące plików wykonywalnych Agent replikacji.
Jeśli agent zostanie zatrzymana z powodu błędu, wyświetlać szczegóły agenta można określić podstawową przyczyną jest błąd.Aby uzyskać informacje dotyczące sposobu wyświetlania błędów Szczegóły agenta migawki i Agent odczytywania dziennika, zobacz Jak Wyświetlanie informacji i wykonywać zadania dotyczące czynników związanych z publikacją (Monitor replikacji).Informacje agenta dystrybucji i scalanie agenta, zobacz Jak Wyświetlanie informacji i wykonywać zadania dotyczące czynników związanych z subskrypcji (Monitor replikacji).Jeżeli błąd się powtórzy, zwiększyć agenta rejestrowania i określić plik wyjściowy dla dziennika.W zależności od kontekstu błędu to może dostarczyć kroki prowadzące do błędu i/lub dodatkowe komunikaty o błędach.Aby uzyskać więcej informacji, zobacz Agenci replikacji (Rozwiązywanie problemów).
Typowe błędy, które powodują dane nie mają być dostarczane obejmują uprawnienia problemy i ograniczenia naruszenia.Aby uzyskać więcej informacji dotyczących problemów uprawnienia, zobacz Problemy z zabezpieczeniami uniemożliwiają replikowane dane.Naruszenie ograniczenia uniemożliwić wstawianego subskrybent wierszy.
Dla replikacja transakcyjna, naruszenia ograniczenia są traktowane jako błędy; Domyślnie powodują agenta dystrybucji, aby zatrzymać synchronizację, jeżeli one wystąpią (informacji o pominięcie tych błędów, zobacz Pomijanie błędy replikacji transakcyjnej).Dla replikacja scalająca naruszeniach ograniczeń są traktowane jako konfliktów; są one rejestrowane, ale nie mogą powodować agenta scalanie, aby zatrzymać synchronizację.Dla obu typów replikacja ograniczenie naruszenia może prowadzić do innych niż zbieżności, insert, update lub usunięcia pomyślną w jeden węzeł nie powiodła się w innej.
Po opublikowaniu tabela określić domyślne opcje schematu, że ograniczenia na klucz obcy i ograniczeń check powinny zostać utworzone w baza danych subskrypcja z nie dla replikacji zestawu opcji.Jeśli aplikacja wymaga innych ustawień dla ograniczenia, 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 replikacji Transact-SQL).
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.