Udostępnij za pośrednictwem


Data Is Not Being Delivered to Subscribers

Jeśli wydaje się, że dane nie są są dostarczane do subskrybentów, istnieją dwie szerokie przyczyny:

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

  • Subskrybent Trwa usuwanie danych, po jej zastosowaniu.

Wyjaśnienie

Istnieje kilka możliwych przyczyn nie są dostarczane do subskrybentów danych:

  • W tabela jest filtrowana, a nie ma żadnych zmian do danej subskrybent.

  • Jeden lub więcej agentów nie działają lub nie można nawiązać z powodu błędu.

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

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

  • procedura przechowywana INSERT używane przez transakcyjnych artykuł zawiera warunek, który nie jest spełniony.

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

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

Akcja użytkownika

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

  • 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ślają, czy brakuje danych, 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).

Adresowanie przyczyną brakujących danych

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

  • W tabela jest filtrowana, a nie ma żadnych zmian do danej subskrybent.

    Istnieje możliwość, że wiersze Brak subskrybent nie zostały replikowane, ponieważ nie spełniają kryteriów filtrowania dla danej publikacja.Wszystkie typy replikacja obsługuje statycznych filtrów i scalania replikacja 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, wykonaj następujące procedury i sprawdź, wartość filtru klauzula:

    Aby określić, czy spełniają dowolną brakuje wierszy kryteriów filtrowania, należy użyć klauzula filtru.Na przykład można wykonać klauzulę filtru tabela przez wydawcę a ustalić, czy dane, zwracane jest zgodny z danych przez subskrybent.

  • Jeden lub więcej agentów nie działają lub nie można nawiązać z powodu błędu:

    • Jeśli są inicjowanie subskrypcja, upewnij się, że Agent migawka dla publikacja zostało ukończone przed próbą zastosowania migawka Agent dystrybucji lub agenta korespondencji seryjnej.Podczas próby zastosowania migawka, przed jego zakończeniem, pojawia się następujący komunikat o błędzie: "Migawkę wstępnego dla publikacja '% s' nie jest jeszcze dostępne. „

    • Upewnij się, że uruchomiona Agent odczytywania dziennika i dystrybucji Agent replikacja transakcyjnej; replikacja łączenia, upewnij się, jest uruchomiony agent korespondencji seryjnej.Aby uzyskać informacje na temat uruchamiania tych czynników zobacz How to: Start and Stop a Replication Agent (SQL Server Management Studio) i Pojęcia dotyczące replikacja agenta pliki wykonywalne.

    • Jeśli agent zostanie zatrzymana z powodu błędu, służy do wyświetlania szczegółów błąd agenta do ustalenia, co to jest przyczyną podstawowej.Aby uzyskać informacje na temat wyświetlania Szczegóły błędu dla agenta migawka i Agent odczytywania dziennika Zobacz Jak Służy do wyświetlania informacji i wykonuje zadania dla agentów skojarzony z publikacją (Monitor replikacja). Aby uzyskać informacje dotyczące agenta dystrybucji i scalanie agenta zobacz Jak Służy do wyświetlania informacji i wykonuje zadania dla agentów skojarzony Z subskrypcja (Monitor replikacja). Jeżeli błąd się powtórzy, zwiększ rejestrowania agenta i określenie pliku wyjściowego dla dziennika.W zależności od kontekstu błędu to może dostarczyć czynności, które doprowadziły do błędu i/lub dodatkowe komunikaty o błędach.Aby uzyskać więcej informacji zobacz Replication Agents (Troubleshooting).

      Typowe błędy powodujące dane, które nie mają być dostarczane należą: problemy z uprawnieniami i naruszeniach ograniczeń.Aby uzyskać więcej informacji dotyczących problemów z uprawnień Zobacz Security Issues Are Preventing Data from Being Replicated. Naruszenie ograniczenia wyłączyć wierszy zostanie wstawiony 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).

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

    • Włączenie publikacja zostać zainicjowany z kopia zapasowa, zmiany do opublikowanej tabel są śledzone w dzienniku bazy danych w publikacja, natychmiast po utworzeniu publikacja.Podczas inicjowania subskrypcja oczekujące zmiany są dostarczane do subskrybent tak długo, jak będą nadal dostępne w bazie danych dystrybucji.

    • W przeciwieństwie do inicjowania z kopia zapasowa, jeśli zainicjować subskrypcja przy użyciu tylko obsługi replikacja , opcję użytkownik lub aplikacja musi zapewnić, dane i schematy są poprawnie synchronizowane w momencie dodawania subskrypcja.Jeśli na przykład istnieje działanie na Wydawca między danymi czasu i schematu są kopiowane do subskrybent oraz czas, w której zostanie dodany subskrypcja, zmiany powstałe w wyniku tego działania może nie być replikowane do subskrybent.

    Aby uzyskać więcej informacji zobacz Inicjowanie transakcji subskrypcja bez migawka.

  • replikacja wykonanie procedura przechowywana 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.

  • procedura przechowywana INSERT używane przez transakcyjnych artykuł zawiera warunek, który nie jest spełniony.

    Domyślnie replikacja transakcyjnej używa zestaw procedur przechowywanych propagowanie zmian do subskrybentów.Można także dostosować te procedury do uwzględnienia logika biznesowa wymagane przez daną aplikację.Aby uzyskać więcej informacji zobacz Określanie, jak zmiany są rozpropagowane dla transakcji artykułów. Jeśli procedura przechowywana INSERT zawiera warunek w jego logiki, która nie jest spełniony, insert nie występuje.Należy wziąć pod uwagę procedury, który jest dostosowany do sprawdzenia wartości w tabeli (Tabela A) przez subskrybent przed zezwoleniem wstawiania do innej tabeli (Tabela B).Jeśli wartość nie jest dostępne w tabela A z powodu błędu lub ponieważ dane nie został jeszcze zreplikowany do tej tabela, wiersz oczekiwane brakuje tabela B.

  • Dane są usunięte przez użytkownika, skrypt replikacja lub innej aplikacji:

    • Jeśli chcesz zezwolić użytkownikom na usuwanie danych przez subskrybent, za pomocą replikacja łączenia replikacja transakcyjnej z subskrypcjami mogą być aktualizowane i replikacja transakcyjnej typu peer-to-peer.Usuwa jest przekazywana do Wydawca, więc dane Wydawca i subskrybent po pewnym czasie zbieżne.Aby uzyskać więcej informacji zobacz Omówienie replikacja łączenia i Typy publikacja dla transakcji replikacja.

    • Aby uniemożliwić użytkownikom 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.

    • Replikacja umożliwia wykonać skryptów przed i po zastosowaniu migawkę i podczas synchronizacji.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 usuwania danych na subskrybent powinna być traktowana jako tylko do odczytu, administrator musi zapewnić, nie spowoduje to bez wywoływania zbieżności.

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

    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.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.

See Also

Concepts