SQL Replication "Zeile Nicht Gefunden" - Fehler
Ich habe Transaktions-Replikation zwischen zwei Datenbanken. Ich fürchte, Sie sind etwas out of sync, aber ich weiß nicht, welche Datensätze betroffen sind. Wenn ich wüsste, ich könnte es beheben Sie manuell auf dem Abonnenten Seite.
SQL Server gibt mir diese Meldung:
Die Zeile wurde nicht gefunden auf dem Abonnenten bei der Anwendung des replizierten Befehls. (Quelle: MSSQLServer, Fehlernummer: 20598)
Ich geschaut habe, um zu versuchen, um herauszufinden, welche Tabelle, oder noch besser, welcher Datensatz das Problem verursacht, aber ich kann nicht finden diese Informationen überall.
Den detailliertesten Daten, die ich bisher gefunden habe, ist:
Transaction sequence number: 0x0003BB0E000001DF000600000000, Befehls-ID: 1
Aber wie finde ich die Tabelle und die Zeile aus? Irgendwelche Ideen?
InformationsquelleAutor jeremcc | 2009-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies gibt Ihnen die Tabelle der Fehler ist gegen
Und dies wird geben Sie den Befehl (und den Primärschlüssel (also die Zeile) der Befehl ausgeführt wurde gegen)
InformationsquelleAutor Matthew
Werde ich die Antwort auf meine eigene Frage mit einem workaround landete ich mit.
Leider konnte ich nicht herausfinden, welche Tabelle war, das Problem verursacht, durch die SQL Server-Replikation-Schnittstelle (oder das Ereignisprotokoll für diese Angelegenheit). Es hat einfach nicht sagen.
Also das nächste, woran ich dachte, war, "Was ist, wenn ich Sie bekommen könnte die Replikation fortgesetzt wird, obwohl es ein Fehler?" Und siehe da, es gibt einen Weg. In der Tat, es ist einfach. Es ist eine Besondere Verteilungs-Agent-Profil aufgerufen, "Weiterhin auf die Konsistenz der Daten Fehler." Wenn Sie aktivieren, dass dann diese Art von Fehler wird nur protokolliert und weitergegeben. Einmal ist es durch die Anwendung der Transaktionen und potenziell Protokollierung der Fehler (ich habe nur festgestellt zwei), dann können Sie zurück und verwenden Sie RedGate SQL Data Compare (oder einem anderen tool) für den Vergleich der beiden Datenbanken, die erforderlichen Korrekturen vornehmen, um den Abonnenten und starten Sie dann die Replikation wieder läuft.
Beachten Sie, für diese zu arbeiten, der Veröffentlichungsdatenbank müssen "leise" während der Teil des Prozesses, in dem Sie Abweichungen und Korrektur der Abonnenten-Datenbank. Zum Glück hatte ich, dass Luxus in diesem Fall.
InformationsquelleAutor jeremcc
Wenn Ihre Datenbank ist nicht übermäßig groß, ich würde die Replikation beenden, re-snapshot-und dann neu-starten der Replikation. Diese technet-Artikel beschreibt die Schritte.
Wenn es out-of-sync durch einen Benutzer versehentlich Daten ändern, auf die Replik, ich würde die erforderlichen Berechtigungen, um dies zu verhindern.
Diese Replikation Artikel zu Lesen lohnt.
Sie haben die RedGate-Daten-Vergleichs-tool zum Vergleichen? (Sie hat eine 14-tägige Testversion) , wäre zumindest lassen Sie die Zeilen schnell.
Yep, das ist genau das, was ich verwende. 🙂 Das problem ist, dass die aktuelle diff sagt mir x-Zeilen fehlen (da die Replikation Verzögerung), aber ich weiß nicht, was man der Schuldige ist. Ich glaube, ich habe gefunden die Abhilfe obwohl. Es hat zu tun mit einem "SkipErrors" - flag auf dem Verteiler. Ich werde es bald.
InformationsquelleAutor Mitch Wheat
Verwenden diese Abfrage, um herauszufinden, den Artikel, der ist out-of-sync:
InformationsquelleAutor KShan
natürlich, wenn Sie überprüfen Sie den Fehler bei der Replikation schlägt fehl, es sagt Ihnen auch, welcher Datensatz fehlerhaft ist und Sie extrahieren konnte, die Daten aus dem core-system und fügen Sie Sie einfach auf die Abonnenten.
Dies ist besser als überspringen von Fehlern, wie mit den SQL-Daten zu Vergleichen, wird es sperren Sie die Tabelle für den Vergleich und wenn Sie haben Millionen von Zeilen kann dies eine lange Zeit zu laufen.
Tris
InformationsquelleAutor
Ändern Sie das Profil "Weiterhin auf die Konsistenz der Daten Fehler" funktioniert nicht immer. Natürlich, es reduziert oder verhindert ein Fehler, aber Sie wird nicht die ganzen richtigen Daten. Es wird überspringen die Zeilen, durch die ein Fehler Auftritt, und damit werden Sie nicht bekommen genaue Daten.
InformationsquelleAutor Shahid
folgende Prüfungen lösen mein problem
andere Fehler in der Replikation überwachen
InformationsquelleAutor Iman Abidi
Dieser Fehler kommt normalerweise, wenn bestimmten Datensatz nicht existiert, an den Teilnehmer-und eine update-oder delete-Befehl ausgeführt, für denselben Datensatz auf dem primären server und die repliziert werden, auf Abonnenten als auch.
Als diese Aufzeichnungen nicht vorhanden, auf Abonnenten, die Replikation wirft eine Fehlermeldung "Zeile Nicht Gefunden"
Lösung für diesen Fehler, um die Replikation wieder zu den normalen Betriebs-Zustand:
Können wir überprüfen Sie mit der folgenden Abfrage, ob die Anfrage beim Verlag wurde von update-oder delete-Anweisung:
Bekommen wir artical-id-Informationen von der obigen Abfrage, die übergeben werden kann, um unter proc:
Obigen Abfrage wird Auskunft darüber geben, ob es eine update-Anweisung oder delete-Anweisung.
Den Datensatz direkt gelöscht msrepl_commands-Objekte, so dass die Replikation nicht machen Wiederholungsversuche für die Aufnahme
Müssen Sie den Datensatz manuell vom Verleger DB-Abonnenten DB:
InformationsquelleAutor Sanjay Aswani