Udostępnij za pośrednictwem


Skipping Errors in Transactional Replication

Dla replikacja transakcyjnej są pominięte błędy, jeżeli wystąpi podczas procesu dystrybucji na dwa sposoby:

  • The -SkipErrors parameter of the Distribution Agent, which allows you to skip errors of a certain type.Transakcja z powodu błędu nie jest zatwierdzona, ale są kolejne transakcje.

  • The sp_setsubscriptionxactseqno procedura przechowywana, which allows you to skip one or more transactions that cause errors.Ta opcja jest niedostępna dla innych niż-SQL Server Subskrybentów.

Important noteImportant Note:

Zgodnie z typową replikacja przetwarzania powinny nie występują błędy, które muszą być pominięte.Błędy powinny być pominięte z ostrożnością, a opis jest jakie warunek błędu, dlaczego to ma miejsce i przyczyny błędu lub określonych transakcji musi być pominięte zamiast rozpoznać.Jeśli transakcje zatwierdzone przez wydawcę, są pomijane przez subskrybent, dwa węzły nie zostanie całkowicie zsynchronizowany, co może prowadzić do błędów dodatkowe.

Parametr SkipErrors

Domyślnie gdy agent dystrybucji wystąpi błąd, agent zatrzymuje.Jeśli używasz -SkipErrors parametr i określ oczekiwany błędy i błędy, które nie powinien zakłócać replikacja, agent będzie rejestrować informacje o błędzie, a następnie kontynuować działania.Na przykład, jeśli chcesz określić, że Agent dystrybucji powinien rejestrować zduplikowane naruszenia klucz, ale kontynuuje przetwarzanie kolejnych transakcji określić czy agent należy pominąć błędy 2601 (nie można wstawić zduplikowanych wierszy kluczy w obiekcie „ %. * ls "z indeks unikatowy „ %. * ls.) i 2627 (naruszenie ograniczenia % ls ' %. * ls'.Nie można wstawić zduplikowany klucz w obiekcie „ %. * ls.):

-SkipErrors 2601;2627

Najczęstszym sposobem używania -SkipErrors parametr jest używany profil Agent dystrybucji zatytułowany Kontynuuj na błędy spójności danych.Agent dystrybucji następnie pominie błędy 2601, 2627 i 20598 (wiersz nie został znaleziony przez subskrybent po zastosowaniu polecenia replikowanych).Aby uzyskać więcej informacji zobacz Replication Agent Profiles. Oprócz tego profilu wstępnie zdefiniowane można określić parametr w profilu programu agent, można tworzyć lub modyfikować lub w wierszu polecenia.Aby uzyskać więcej informacji, zobacz:

Important noteImportant Note:

Domyślnie wyzwalacze wykonywania z XACT_ABORT, ustawienie włączone.Jeśli instrukcja w wyzwalacz powoduje błąd w czasie, gdy agent dystrybucji jest stosowania zmian przez subskrybent, całej partia zmiany zakończy się niepowodzeniem, a nie poszczególnych instrukcji.W replikacja transakcyjnej, można użyć -SkipErrors parametr agenta dystrybucji, aby pominąć instrukcji, które powodują błędy.Jeśli -SkipErrors jest używana z ON XACT_ABORT, całej partia zmian jest pomijany, jeśli oświadczenie powoduje błąd.O ile nie wymagają XACT_ABORT się zestaw on w wyzwalaczy, zaleca się, że użytkownik zestaw będzie wyłączona w przypadku korzystania z -SkipErrors parametr.Aby ustawić opcję, określanie SET XACT_ABORT OFF w definicji wyzwalacza. Aby uzyskać więcej informacji na temat XACT_ABORT zobacz zestaw XACT_ABORT (języka Transact-SQL).

Sp_setsubscriptionxactseqno procedura przechowywana

The sp_setsubscriptionxactseqno procedura przechowywana can be used to skip one or more transactions that cause errors when applied at the subskrybent.Jeśli nastąpiło uszkodzenie i want to skip co najmniej jednej transakcji:

  1. wykonać sp_helpsubscriptionerrors u dystrybutor po zatrzymaniu Agent dystrybutor.Ta procedura przechowywana zwraca kolumna xact_seqno, która zawiera numer kolejny dziennika (LSN) dla każdej nieudana transakcja.

  2. wykonać sp_setsubscriptionxactseqno, określając wartość dla parametru @ xact_seqno.Aby pominąć wszystkie nieudane transakcje, należy określić największy LSN, zwracane przez sp_helpsubscriptionerrors.

Aby uzyskać więcej informacji zobacz sp_setsubscriptionxactseqno (języka Transact-SQL) i sp_helpsubscriptionerrors (języka Transact-SQL).