Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehlerbehebung bei der SQL Server-Replikation

Im vorherigen Artikel Einrichten und Konfigurieren der SQL Server-Replikation haben wir ausführlich das SQL Server-Replikationskonzept, seine Komponenten, Typen und die Schritt-für-Schritt-Konfiguration der SQL-Transaktionsreplikation besprochen. Es wird dringend empfohlen, den vorherigen Artikel durchzugehen und das Replikationskonzept und seine Komponenten zu verstehen, bevor Sie diesen Artikel lesen. In diesem Artikel erfahren Sie, wie Sie Probleme mit einer vorhandenen SQL Server-Replikationssite beheben.

Übersicht zur Fehlerbehebung

Das Hauptziel der SQL Server-Replikation besteht darin, die Daten im Verleger und im Abonnenten synchron zu halten. Wenn im glücklichen Szenario eine Transaktion in der Veröffentlichungsdatenbank ausgeführt und festgeschrieben wird, wird sie in die Verteilungsdatenbank kopiert, dann synchronisiert und auf alle Abonnenten angewendet, die mit diesem Herausgeber verbunden sind. Wenn bei einem Schritt dieses Prozesses ein Problem auftritt, sind die Herausgeberänderungen auf der Abonnentenseite nicht verfügbar. In diesem Fall müssen wir dieses Problem so schnell wie möglich beheben, bevor es zu einer abgelaufenen SQL Replication-Site kommt, die von Grund auf neu synchronisiert werden sollte, oder einer Datenbank mit ihrer Transaktionsprotokolldatei der freie Speicherplatz ausgeht und alle Datenbanktransaktionen angehalten werden .

Das Identifizieren, bei welchem ​​Schritt die Replikationssynchronisierung fehlschlägt, und das Zuweisen einer hinweisenden Fehlermeldung, die zur Behebung des Problems führt, ist der schwierigste Teil des Problembehandlungsprozesses für die SQL Server-Replikation. Auch das Überprüfen der letzten Synchronisierungszeit und der zu/nach dieser Zeit durchgeführten Änderungen, die diesen Fehler verursachen können, kann bei der Fehlerbehebung des Replikationssynchronisierungsfehlers hilfreich sein.

Das Verständnis der Rolle des SQL Server Replication-Agents hilft bei der Identifizierung, bei welchem ​​Schritt die Synchronisierung fehlschlägt. Denken Sie daran, dass es drei Replikations-Agents gibt, die den meisten SQL Server-Replikationstypen gemeinsam sind. Der Snapshot-Agent ist verantwortlich für die Erstellung des anfänglichen Synchronisations-Snapshots. Der Protokolllese-Agent ist dafür verantwortlich, die Änderungen aus der Datenbank-Transaktionsprotokolldatei zu lesen und sie in die Distributionsdatenbank und schließlich in die Distribution zu kopieren Agent, der für die Synchronisierung der Änderungen mit den Abonnenten verantwortlich ist.

In diesem Artikel nutzen wir den Replikationsmonitor und Job Activity Monitor Windows beim Überwachen des SQL Server-Replikationsstatus und beim Abrufen von Informationen über Synchronisierungsfehler.

Fehlerbehebungsszenarien

Der beste und direkte Weg, um zu verstehen, wie Probleme mit der SQL Server-Replikation behoben werden können, besteht darin, praktische Szenarien bereitzustellen und zu zeigen, wie dieses spezielle Problem behoben werden kann. Lassen Sie uns beginnen, die Szenarien einzeln zu diskutieren.

Problem mit dem SQL Server-Agent-Dienst

Der SQL Server-Agent-Dienst spielt eine wichtige Rolle im Synchronisierungsprozess der SQL Server-Replikation. Dies liegt daran, dass jeder Replikations-Agent unter einem SQL-Agent-Job ausgeführt wird.

Als proaktiver Datenbankadministrator müssen Sie den Status der SQL-Replikationssite täglich überprüfen. Um den Status der Replikationssite zu überprüfen, klicken Sie mit der rechten Maustaste auf die Veröffentlichung unter dem Knoten Replikation -> Lokale Veröffentlichungen und wählen Sie Replikationsüberwachung starten Option, wie unten gezeigt:

Im Replikationsüberwachungsfenster können Sie eine Warnmeldung sehen, die darauf hinweist, dass die Replikation bald abläuft oder bereits abgelaufen ist, ohne dass eine darauf hinweisende Fehlermeldung angezeigt wird, wie unten:

Wenn das Replication Monitor-Fenster uns keine nützlichen Informationen darüber liefert, warum die Replikations-Site bald abläuft, besteht der nächste Schritt darin, den Job Activity Monitor zu überprüfen unter dem Knoten SQL Server-Agent. Wenn Sie den SQL Server Agent-Knoten besuchen, sehen Sie direkt, dass der SQL Server Agent-Dienst nicht ausgeführt wird (anhand des roten Kreises daneben). Wenn der SQL Server-Agent-Dienst nicht ausgeführt wird, bedeutet dies, dass alle unter dieser Instanz erstellten Jobs nicht funktionieren, einschließlich der Replikations-Agent-Jobs. Infolgedessen funktioniert die gesamte Replikationssite nicht.

Um dieses Problem zu beheben, müssen wir den SQL Server Agent-Dienst direkt aus dem SQL Server Management Studio oder mithilfe des SQL Server Configuration Manager (empfohlen) starten, wie unten gezeigt:

Überprüfen Sie nach dem Starten des SQL Server-Agent-Dienstes erneut den Replikationsmonitor und vergewissern Sie sich, dass der Status des Abonnenten Wird ausgeführt lautet und alle ausstehenden Transaktionen werden erfolgreich mit dem Abonnenten synchronisiert. Sie können diese Schritte nacheinander überprüfen, indem Sie überprüfen, ob die Datensätze aus dem Abschnitt Publisher to Distributor kopiert wurden:

Dann erfolgreich vom Verteiler zum Abonnenten synchronisiert, wie unten:

Stellen Sie schließlich sicher, dass es keine unverteilte Transaktion aus der letzten Registerkarte gibt, wie unten gezeigt:

Danach müssen wir sicherstellen, dass die Replikations-Agent-Jobs ohne Probleme ausgeführt werden. Die SQL-Agent-Jobs können überprüft werden, indem Sie den SQL Server-Agent-Knoten unter dem SSMS-Objekt-Explorer erweitern und den Job-Aktivitätsmonitor anzeigen. Überprüfen Sie dann, ob der Protokolllese-Agent und der Verteiler-Agent ausgeführt werden, wobei zu berücksichtigen ist, dass der Snapshot-Agent nur während dieser Zeit funktioniert Snapshot-Erstellungsprozess, wie unten gezeigt:

Sie können auch den Verlauf der Replikations-Agenten-Jobs und den vorherigen Fehlergrund überprüfen, indem Sie mit der rechten Maustaste auf diesen Job klicken und Verlauf anzeigen auswählen Option wie folgt:

Wo Sie möglicherweise eine indikative Fehlermeldung finden, die Ihnen hilft, dieses Problem in Zukunft zu lösen, siehe unten:

Um das vorherige Problem zu lösen, sollte der Startmodus des SQL Server Agent-Dienstes von Manuell auf Automatisch geändert werden. Auf diese Weise stellen Sie sicher, dass der Dienst automatisch gestartet wird, wenn der Hosting-Server neu gestartet wird.

Snapshot-Agent-Berechtigungsproblem

Angenommen, Sie haben beim Überprüfen des SQL Server-Replikationsstatus mithilfe des Replikationsmonitors festgestellt, dass ein Replikationsfehler vorliegt, der am X-Zeichen innerhalb des roten Kreises erkennbar ist. Und der Replikationsmonitor zeigt anhand des X-Zeichens innerhalb des roten Kreises oben auf der Registerkarte „Agents“, dass der Fehler von einem der Replikationsagenten stammt.

Um diesen Replikationsfehler zu identifizieren, sollten wir die Registerkarte „Agents“ durchsuchen und prüfen, welcher Agent fehlschlägt. Auf der Seite „Agents“ sehen Sie, dass der Snapshot-Agent fehlerhaft ist. Doppelklicken Sie auf den Snapshot-Agenten und überprüfen Sie die folgende Fehlermeldung:

Der Replikationsagent hat seit 10 Minuten keine Fortschrittsmeldung protokolliert. Dies kann auf einen nicht reagierenden Agenten oder eine hohe Systemaktivität hinweisen. Stellen Sie sicher, dass Datensätze zum Ziel repliziert werden und dass Verbindungen zum Abonnenten, Herausgeber und Verteiler noch aktiv sind.

Leider ist diese Fehlermeldung generisch und zeigt nur an, dass der Snapshot-Agent nicht funktioniert, ohne den Grund wie folgt anzugeben:

Dann müssen wir an anderer Stelle nach nützlichen Informationen suchen, nämlich im Snapshot-Agent-Job. Im Fenster „Job Activity Monitor“ unter dem Knoten „SQL Server-Agent“ können Sie sehen, dass der Snapshot-Agent-Job fehlgeschlagen ist. Und aus diesem Jobverlauf können Sie ersehen, dass er kürzlich aufgrund des Proxy-Authentifizierungsproblems fehlgeschlagen ist. Mit anderen Worten, die Anmeldeinformationen für das Konto, unter dem der Snapshot-Agent ausgeführt wird, sind nicht korrekt, wie unten gezeigt:

Um das Problem mit den Snapshot-Agent-Anmeldeinformationen zu beheben, klicken Sie mit der rechten Maustaste auf die Veröffentlichung unter dem Knoten „Replikation“ -> „Lokale Veröffentlichung“ und wählen Sie die Eigenschaften aus Möglichkeit. Durchsuchen Sie im Fenster „Veröffentlichungseigenschaften“ die Agent-Sicherheit Seite und geben Sie die Anmeldeinformationen für das Konto erneut ein, unter dem der Snapshot-Agent ausgeführt wird.

Nachdem Sie die Anmeldeinformationen für das Snapshot-Agent-Konto aktualisiert haben, starten Sie den Snapshot-Agent-Job erneut im Fenster „Job Activity Monitor“ und stellen Sie sicher, dass der Job wie folgt einwandfrei funktioniert:

Überprüfen Sie auch, ob der Snapshot-Agent jetzt einwandfrei funktioniert und die Fehlermeldung nicht mehr unter dem Replikationsmonitor angezeigt wird, wie unten gezeigt:

Problem mit Snapshot-Ordnerberechtigungen

Angenommen, beim Versuch, den Verleger und den Abonnenten mithilfe des anfänglichen Snapshots zu synchronisieren oder die Snapshot-Replikationssite mithilfe eines neuen Snapshots neu zu synchronisieren, ist der Snapshot-Erstellungsprozess mit der folgenden Zugriffsfehlermeldung fehlgeschlagen:

Diese Fehlermeldung zeigt, dass das Konto, unter dem der Snapshot-Agent ausgeführt wird, keine Berechtigung hat, auf den in der Fehlermeldung angegebenen Snapshot-Ordner zuzugreifen.

Um dieses Problem zu beheben, müssen wir das Konto, unter dem der Snapshot-Agent ausgeführt wird, auf der Seite „Agent-Sicherheit“ des Fensters „Veröffentlichungseigenschaften“ überprüfen, wie unten gezeigt:

Durchsuchen Sie dann den in der Fehlermeldung angegebenen Snapshot-Ordner und stellen Sie sicher, dass dieses Snapshot-Konto über eine Mindestlese-/Schreibberechtigung für diesen Ordner verfügt. Führen Sie dann den Snapshot-Agent erneut aus und prüfen Sie, ob das Problem jetzt behoben ist und der Synchronisierungs-Snapshot erfolgreich erstellt wurde unten:

Abonnentenberechtigungsproblem

Angenommen, Sie sehen beim Überprüfen des Standortstatus der SQL Server-Replikation mithilfe des Replikationsmonitors, dass beim Abonnenten ein Fehler aufgetreten ist, wie unten dargestellt:

Wenn Sie auf das Fehlersymbol klicken, sehen Sie, dass der Fehler beim Versuch aufgetreten ist, die Transaktionen vom Verteiler zum Abonnenten zu synchronisieren. Und aus der Fehlermeldung geht hervor, dass der Verteiler aufgrund eines Berechtigungsproblems keine Verbindung mit der SQL Server-Instanz des Abonnenten herstellen kann, wie unten gezeigt:

Um dieses Problem zu beheben, müssen wir die Anmeldeinformationen überprüfen und aktualisieren, die zum Herstellen einer Verbindung mit der Abonnenteninstanz verwendet werden. Um die Anmeldeinformationen zu überprüfen, klicken Sie mit der rechten Maustaste auf das Abonnement unter dem Knoten „Replikation“ -> „Lokale Veröffentlichungen“ -> „Name der aktuellen Veröffentlichung“ und wählen Sie die Option „Eigenschaften“. Von der Abonnentenverbindung Aktualisieren Sie im Feld "Abonnenteneigenschaften" die Anmeldeinformationen für das Konto, das zum Herstellen einer Verbindung mit der Abonnenteninstanz verwendet wird, wie unten gezeigt:

Überprüfen Sie danach den Replikationsstatus erneut im Replikationsmonitor und Sie werden sehen, dass das Problem mit der Abonnentenverbindung nicht mehr verfügbar ist und die Replikationssite normal ausgeführt wird, wie unten gezeigt:

Abonnent nicht erreichbar

Ein weiteres Problem mit SQL Server-Replikationsfehlern, mit dem Sie möglicherweise auf der Abonnentenseite konfrontiert werden, besteht darin, dass der Verteiler keine Verbindung zum Abonnenten herstellen kann, was auf der Seite „Verteiler zum Abonnenten“ anzeigt, dass er aufgrund von „Network Related … ” Konnektivitätsfehler, der im Replikationsüberwachungsfenster unten angezeigt wird:

Diese Fehlermeldung weist darauf hin, dass ein Verbindungsproblem zwischen der Verteilerinstanz und der Abonnenteninstanz besteht. Die erste und unkomplizierte Methode zum Überprüfen dieses Konnektivitätsproblems besteht darin, sicherzustellen, dass die SQL Server-Instanz des Abonnenten online ist. Dies kann im SQL Server-Konfigurations-Manager auf der Abonnentenseite überprüft werden. In unserer Situation können wir sehen, dass der SQL Server-Dienst auf der Abonnentenseite angehalten wurde. Um dieses Problem zu beheben, starten Sie den SQL Server-Dienst und überprüfen Sie im Replikationsmonitor, ob die Replikationssite erneut synchronisiert wird, wie unten gezeigt. Weitere Informationen zu Problemen mit der SQL-Konnektivität finden Sie im MS-Dokument „Fehlerbehebung bei Konnektivität“:

Problem mit der Berechtigung der Abonnentendatenbank

Angenommen, Sie überprüfen den Synchronisierungsstatus der SQL Server-Replikation mithilfe des Replikationsmonitors und es wird festgestellt, dass die Replikation fehlschlägt, während Sie versuchen, die Änderungen vom Verteiler auf den Abonnenten zu replizieren. Wenn Sie auf den Abonnentenfehler klicken, sehen Sie, dass die Der Distributor kann den Abonnenten erreichen und eine Verbindung zu ihm herstellen, kann sich jedoch aufgrund fehlender Berechtigungen nicht mit der Abonnementdatenbank verbinden, wie unten gezeigt:

Um dieses Problem zu beheben, stellen Sie eine Verbindung mit dem Abonnenten her und stellen Sie sicher, dass das Konto, das zum Herstellen einer Verbindung mit der Abonnentendatenbank verwendet wird, Mitglied der festen Datenbankrolle db_Owner ist, wie unten gezeigt:

Überprüfen Sie danach erneut den Replikationsmonitor und stellen Sie sicher, dass der Verteiler die Abonnementdatenbank erreichen und die Änderungen wie folgt replizieren kann:

Problem mit Datenunterschieden

Angenommen, eines der Datenbankentwicklungsteams behauptet, dass einige Änderungen, die an der Schichttabelle auf dem Verleger (SQL1) vorgenommen werden, sich nicht in den täglichen Berichten widerspiegeln, die auf der Abonnenteninstanz (SQL2) ausgeführt werden, und er hat den folgenden Snapshot bereitgestellt das zeigt, dass die Änderungen nicht repliziert werden:

Der erste Schritt bei der Überprüfung des Replikationssynchronisierungsproblems besteht darin, den Replikationsmonitor zu öffnen und herauszufinden, bei welchem ​​Schritt er fehlschlägt. Aus dem Replikationsmonitor können Sie sehen, dass der Protokollleseagent fehlschlägt, da die Änderungen nicht vom Verteiler auf den Abonnenten repliziert werden, aber keine eindeutige Meldung von diesem Agent zurückgegeben wird, wie unten gezeigt:

Da wir im Replikationsmonitor keine aussagekräftige Fehlermeldung finden können, überprüfen wir den Verlauf des Auftrags des Protokollleseagenten mithilfe des Auftragsaktivitätsmonitors, der zeigt, dass die Anmeldeinformationen für das Konto, unter dem der Protokollleseagent ausgeführt wird, falsch sind , wie unten gezeigt:

Um das Problem mit den Anmeldeinformationen des Protokolllese-Agenten zu beheben, durchsuchen Sie die Seite „Agent-Sicherheit“ des Fensters „Veröffentlichungseigenschaften“ und aktualisieren Sie die Anmeldeinformationen des Protokolllese-Agenten mit gültigen Anmeldeinformationen wie unten:

Wenn Sie den Replikationsmonitor erneut überprüfen, werden Sie sehen, dass die Änderungen erfolgreich repliziert wurden und dass die Daten mit den neuen Schichtänderungen aktualisiert wurden, wie unten gezeigt:

Zeile beim Abonnenten nicht gefunden

Betrachten wir das Thema von einer anderen Seite. Nehmen wir an, es gibt eine Änderung in der Schichttabelle, wie unten gezeigt:

Diese Änderung wird jedoch nicht auf den Abonnenten repliziert, und der gesamte SQL Server-Replikationsstandort ist fehlgeschlagen. Aus dem Replikationsmonitor können Sie sehen, dass es beim Versuch, die Änderung vom Verteiler zum Abonnenten vorzunehmen, fehlschlägt und aufgrund der Tatsache fehlschlägt, dass es nicht möglich ist, diesen bestimmten Datensatz mit der ID gleich 3 zu aktualisieren, da dieser Datensatz ist in der Abonnentendatenbanktabelle nicht verfügbar, wie unten gezeigt:

Wenn Sie diesen Datensatz auf der Abonnentenseite (SQL2) überprüfen, werden Sie sehen, dass der Datensatz nicht verfügbar ist, wie unten:

Um dieses Problem zu lösen, müssen wir diesen Datensatz erneut in die Tabelle der Abonnentendatenbank einfügen und den Verteiler versuchen lassen, ihn erneut zu aktualisieren, wodurch das Problem mit dem Replikationssynchronisierungsfehler wie unten gezeigt behoben wird:

SQL Server stellt uns eine Option zur Verfügung, damit die Replikationssite weiterhin funktioniert, obwohl ein Dateninkonsistenzproblem gefunden wird, wobei Sie dieses Inkonsistenzproblem später manuell beheben können. Klicken Sie dazu im Replikationsmonitor mit der rechten Maustaste auf den Abonnenten und wählen Sie Agentenprofil Option, wie unten gezeigt:

Im angezeigten Fenster können Sie das Profil des Protokollleseagenten aktualisieren und ihm erlauben, Datenänderungen weiterhin zu replizieren, falls es zu Dateninkonsistenzproblemen kommt, wie unten gezeigt:

Problem mit nicht initialisiertem Abonnement

Wenn der Replikationsstandort längere Zeit nicht überwacht wird und ein Fehler länger als drei Tage ohne Behebung aufgetreten ist, läuft der Replikationsstandort ab und das Abonnement wird als nicht initialisiert markiert und wartet darauf, mit einem neuen Snapshot erneut initialisiert zu werden . Dasselbe Szenario kann auftreten, wenn Sie ein neues Abonnement erstellen, ohne es zu initialisieren, wie unten gezeigt:

Um dieses Problem zu beheben, sollten wir dieses Abonnement neu initialisieren, indem wir mit der rechten Maustaste auf das Abonnement unter dem Replikationsknoten -> Lokale Veröffentlichungen klicken und die Veröffentlichung erweitern, dann die Option Neu initialisieren wählen und dieses Abonnement für die Initialisierung markieren und es für den Empfang eines neuen bereit machen Schnappschuss, wie unten gezeigt:

Wenn der Abonnementstatus nach der Neuinitialisierung nicht initialisiert bleibt, überprüfen Sie den Snapshot-Agent-Job mithilfe des Fensters Job Activity Monitor und sehen Sie, warum er fehlschlägt. Aus dem Verlauf des Snapshot-Agent-Jobs sehen Sie, dass der Job aufgrund eines Problems fehlgeschlagen ist, das den Eigentümer dieses Agent-Jobs bestimmt, wie unten gezeigt:

Um dieses Problem zu umgehen, öffnen Sie den Snapshot-Agent-Job und ändern Sie den Besitzer des Jobs in SA oder einen beliebigen gültigen Administratorbenutzer, und der Job wird wie folgt erfolgreich ausgeführt:

Jetzt sehen Sie, dass sich der Status des Abonnements in Running geändert hat, was darauf hinweist, dass es auf den ersten Snapshot wartet, um den Synchronisierungsprozess zu starten, wie unten gezeigt:

Um einen neuen Snapshot zu erstellen, klicken Sie mit der rechten Maustaste auf die Veröffentlichung unter dem Knoten „Replikation“ -> „Lokale Veröffentlichungen“ und wählen Sie Status des Snapshot-Agenten anzeigen aus Option.

Klicken Sie im geöffneten Fenster auf die Schaltfläche Start, um den Snapshot-Erstellungsprozess zu starten. Wenn der Snapshot, der alle Publisher-Artikel enthält, erfolgreich erstellt wurde, öffnen Sie den Replikationsmonitor erneut und überprüfen Sie den Status des Abonnements, wo Sie sehen werden, dass der Snapshot auf den Abonnenten angewendet und mit dem Publisher synchronisiert wird, wie unten gezeigt:

Problem mit dem Eigentümer der Publisher-Datenbank

Nehmen Sie außerdem an, dass beim Überprüfen des Status der SQL Server-Replikationssite mithilfe des Replikationsmonitors die Replikationssite ausgefallen ist und der Fehler beim Protokolllese-Agent erkannt wurde. Beim Überprüfen der von diesem Agenten zurückgegebenen Fehlermeldung wird festgestellt, dass ein Problem bei der Bestimmung des aktuellen Eigentümers der Veröffentlichungsdatenbank vorliegt, wie unten gezeigt:

Um dieses Problem zu beheben, müssen wir den aktuellen Eigentümer der Publikationsdatenbank aktualisieren, indem wir ihn mithilfe von SP_changedbowner durch einen gültigen Datenbankbenutzer ersetzen gespeicherte Systemprozedur oder einfach aus dem Eigenschaftenfenster der Datenbank. Führen Sie danach den Log Reader Agent-Job erneut aus, indem Sie das Fenster „Job Activity Monitor“ verwenden, und überprüfen Sie dann, ob das Agentenproblem nicht mehr verfügbar ist, indem Sie den Replikationsmonitor verwenden, wie unten gezeigt:

Schlussfolgerung

In diesem Artikel haben wir verschiedene Probleme aufgezeigt, auf die Sie möglicherweise stoßen, wenn Sie die SQL Server-Replikationsfunktion verwenden, um Daten zwischen verschiedenen Standorten zu kopieren, und wie Sie diese Probleme beheben können.

Es wird dringend empfohlen, die SQL Server-Engine mit den neuesten SPs und CUs auf dem neuesten Stand zu halten, damit alle Fehler im Zusammenhang mit den SQL Server-Replikationsfeatures automatisch behoben werden. Behalten Sie schließlich als proaktiver SQL Server-Datenbankadministrator Ihre Replikationssite im Auge, um Probleme von Anfang an zu beheben, bevor sie größer und schwieriger zu beheben werden.