Verwenden des Parameters "-SkipErrors" in Verteilungs-Agent

In diesem Artikel wird die Verwendung von -SkipErrors Parametern in Verteilungs-Agent eingeführt.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 327817

Zusammenfassung

Microsoft SQL Server schließt den neuen Parameter -SkipErrors in den Verteilungs-Agent ein, der es dem Verteilungs-Agent ermöglicht, den angegebenen Fehler bei der Transaktionsreplikation zu überspringen und den Verteilungsprozess fortzusetzen.

Der folgende Auszug stammt aus dem Thema Behandeln von Agentfehlern in SQL Server-Onlinedokumentation:

Bei der typischen Replikationsverarbeitung sollten keine Fehler auftreten, die übersprungen werden müssen. Die Möglichkeit, Fehler während der Transaktionsreplikation zu überspringen, ist für die besonderen Umstände verfügbar, in denen Sie Fehler erwarten und sich nicht auf die Replikation auswirken möchten (z. B. beim Failover auf einen sekundären Verleger während des Protokollversands).

Microsoft empfiehlt, diesen Parameter vorsichtig und nur dann zu verwenden, wenn Sie folgendes gut verstehen:

  • Was der Fehler angibt.
  • Warum der Fehler auftritt.
  • Warum ist es besser, den Fehler zu überspringen, anstatt ihn zu beheben.

Wenn Sie die Antworten auf diese Elemente nicht kennen, kann eine unangemessene Verwendung des -SkipErrors Parameters zu Dateninkonsistenzen zwischen dem Verleger und dem Abonnenten führen. In diesem Artikel werden einige Probleme beschrieben, die auftreten können, wenn Sie den -SkipErrors Parameter fälschlicherweise verwenden.

Weitere Informationen

Bei der Transaktionsreplikation werden Datenänderungen auf dem Verleger in der Transaktionseinheit an den Abonnenten weitergegeben.

In einer Transaktion können mehrere Befehle vorhanden sein. Wenn bei einem Befehl ein Fehler auftritt, wird für die gesamte Replikationstransaktion standardmäßig ein Rollback auf dem Abonnenten ausgeführt. Wenn Sie den -SkipErrors Parameter hinzufügen, damit der Verteilungs-Agent bestimmte Fehler überspringen kann, wird der einzelne Befehl, der diesen Fehler verursacht, nicht auf den Abonnenten angewendet, aber alle anderen Befehle in den gleichen Transaktionen werden angewendet. In diesem Fall wird die Replikationstransaktion nur teilweise auf den Abonnenten angewendet, wodurch die Dateninkonsistenz zwischen dem Verleger und dem Abonnenten verursacht werden kann.

Zum Beispiel:

Sie haben eine Transaktion, die darauf wartet, in die Abonnententabelle mit dem Namen T1 repliziert zu werden. Diese Transaktion enthält 100 insert-Anweisungen. Wenn es für den Abonnenten gilt, werden die ersten 90 Einfügungen ordnungsgemäß ausgeführt. Die einundneunzigte Insert-Anweisung schlägt jedoch fehl, und der Primärschlüsselverletzungsfehler 2627 tritt auf.

Wenn Sie den -SkipErrors Parameter nicht verwenden (Standardverhalten):

Standardmäßig wird für die gesamte Transaktion ein Rollback ausgeführt, und keiner der 100 neuen Datensätze wird in die abonnierende Tabelle eingefügt. In diesem Fall müssen Sie den Replikationsfehler beheben, damit die Transaktion erneut an den Abonnenten übertragen werden kann.

Wenn Sie den -SkipErrors Parameter verwenden:

Der Verteilungs-Agent protokolliert den Fehler im Verteilungs-Agent Verlauf, überspringt diesen Fehler und setzt dann den Verteilungsprozess fort. Daher werden mit Ausnahme des neunundneunzigesten neuen Datensatzes, der den Fehler verursacht hat, die anderen 99 neuen Datensätze in die abonnierende Tabelle eingefügt. Diese Transaktion wird vom Verteilungs-Agent nicht erneut angewendet, auch nachdem Sie den Fehler auf dem Abonnenten manuell behoben haben. Daher fehlt dem Abonnenten in dieser Situation der neunundneunzigte neue Datensatz, und es tritt ein Dateninkonsistenzproblem auf.

Sie müssen auch beachten, dass in SQL Server 2000 die Verteilungs-Agent in der Regel von mehreren Veröffentlichungen gemeinsam verwendet wird (standardmäßig gibt es eine Verteilungs-Agent pro Veröffentlichungsdatenbank und Abonnementdatenbankpaar). Wenn Sie also den -SkipErrors Parameter zum Verteilungs-Agent Dies wirkt sich auf alle Veröffentlichungen aus, die von diesem Agent gewartet werden. In den Versionen SQL 2005 und SQL 2008 werden bei der Transaktionsreplikation standardmäßig unabhängige Agents für Veröffentlichungen verwendet, die im Assistenten für neue Veröffentlichungen erstellt wurden. Bei Veröffentlichungen, die mit sp_addpublication einer gespeicherten Prozedur erstellt wurden, ist das Standardverhalten die Verwendung eines freigegebenen Agents.

Um den -SkipErrors Parameter für eine bestimmte Veröffentlichung zu verwenden, verwenden Sie einen unabhängigen Agent, der nur ein Abonnement verwendet. Um einen unabhängigen Agent zu verwenden, führen Sie die Schritte für Ihre Version aus:

SQL Server 2000

  1. Klicken Sie in SQL Server Enterprise Manager mit der rechten Maustaste auf die Veröffentlichung, klicken Sie auf Properties, und klicken Sie dann auf der Registerkarte Abonnementoptionen auf die Option Verteilungs-Agent verwenden, die von einer anderen Veröffentlichung aus dieser Datenbank unabhängig ist.

    Hinweis

    Sie können diese Option nicht aktivieren, nachdem Sie dieser Veröffentlichung Abonnements hinzugefügt haben.

  2. Fügen Sie den -SkipErrors Parameter zum Verteilungs-Agent eines bestimmten Abonnements hinzu.

SQL Server 2005 und SQL Server 2008

  1. Navigieren Sie in SQL Server Management Studio zu Replikation, klicken Sie dann im Abschnitt Lokale Veröffentlichungen mit der rechten Maustaste auf die Publikation, klicken Sie auf Eigenschaften, und ändern Sie dann auf der Seite Abonnementoptionen den Wert von Independent Verteilungs-Agent von False in True.

    Hinweis

    Sie können diese Option nicht aktivieren, nachdem Sie dieser Veröffentlichung Abonnements hinzugefügt haben.

  2. Fügen Sie den -SkipErrors Parameter dem Verteilungs-Agent eines bestimmten Abonnements hinzu.

Weitere Informationen finden Sie unter den folgenden Themen: