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

Umgang mit Fehlern mit hohem Schweregrad in SQL Server

In meinem vorherigen Artikel über SQL Server-Agent-Warnungen habe ich Schritt-für-Schritt-Anleitungen zum Einrichten und Konfigurieren von SQL-Agent-Warnungen für die Fehler 19–25 mit hohem Schweregrad sowie Fehler 825 bereitgestellt Besprechen Sie diese Fehler im Detail und teilen Sie mit, was Sie tun sollten, wenn sie in Ihrer Umgebung auftreten.

Fehler mit einem Schweregrad von 19 oder höher verhindern, dass der aktuelle Stapel abgeschlossen wird. Fehler mit einem Schweregrad von 20 und höher sind schwerwiegende Fehler und beenden die aktuelle Client-Verbindung. Diese Fehler können sich auch auf alle Prozesse in der Datenbank auswirken. Schwerwiegende Fehler sind genau das, was der Name schon sagt:Der laufende Prozess wird beendet und die Client-Verbindung wird geschlossen.

Fehler des Schweregrads 19

Ein Fehler mit Schweregrad 19 ist ein Fehler, der auf das Fehlen einer Ressource zurückzuführen ist. Dies bedeutet, dass ein internes Limit (das Sie nicht konfigurieren können) überschritten wurde und das Ende des aktuellen Stapels verursacht hat. Diese Fehler treten selten auf und Sie können nur wenig tun, um das Problem zu beheben. Wenn ein Fehler des Schweregrads 19 auftritt, sollten Sie sich an Ihren primären Supportanbieter wenden; normalerweise wäre das Microsoft.

In all meinen Jahren der Arbeit mit SQL Server kann ich mich an keinen Vorfall erinnern, bei dem ein Fehler des Schweregrads 19 generiert wurde. Selbst bei der Suche in Bing hatte ich Probleme, Vorkommen des Fehlers zu finden. Die wenigen Verweise, die ich fand, bezogen sich auf eine frühe Version von SQL Server und verwiesen auf einen Fehler in SQL Server selbst.

Schweregrad 20 Fehler

Ein Fehler mit Schweregrad 20 ist ein schwerwiegender Fehler im aktuellen Prozess. Dies zeigt an, dass eine Anweisung auf ein Problem gestoßen ist und beendet wurde. Da dies nur den aktuellen Prozess betrifft, ist es sehr unwahrscheinlich, dass die Datenbank selbst beschädigt wurde. Diese Fehler sind an eine einzelne Anweisung gebunden, sodass Sie die gesamte Fehlermeldung sammeln und sich an die Person oder das Team wenden müssen, die/das für diesen Codeabschnitt verantwortlich ist. Dies kann intern oder möglicherweise der Anbieter der Anwendung sein. Ein Beispielfehler ist:

Fehler:18056, Schweregrad 20, Status:29
Der Client konnte eine Sitzung mit SPID 123 nicht wiederverwenden, die für das Verbindungspooling zurückgesetzt wurde.

Bei diesem Fehler würde ich mich an den Anwendungsentwickler oder -anbieter wenden, da der Fehler mit einer gepoolten Verbindung zusammenhängt, bei der beim Zurücksetzen ein Fehler auftritt. Ich würde auch die SQL Server-Protokolle überprüfen, die möglicherweise eine detailliertere Fehlermeldung darüber enthalten, was tatsächlich passiert, um den Fehler zu verursachen.

Fehler des Schweregrads 21

Ein Fehler mit Schweregrad 21 ist ein schwerwiegender Fehler in der Datenbank, der alle Prozesse betrifft, die diese Datenbank verwenden.

Ich habe gesehen, dass dieser Fehler auftritt, wenn versucht wird, eine Datenbank mithilfe von Enterprise-Funktionen auf einer Standard Edition-Instanz wiederherzustellen, sowie wenn eine Datenbank beschädigt ist und der Benutzer versucht, auf eine beschädigte Seite zuzugreifen. Eine Beispielfehlermeldung dieses Typs ist:

Fehler:605, Schweregrad:21, Status 1
Versuch, logische Seite (1:8574233) in Datenbank „DB_NAME“ abzurufen, gehört zu Objekt „0“, nicht zu Objekt „Table01“.

Wenn Sie versuchen, eine Datenbank, die Enterprise-Features verwendet, auf einer Standard Edition-Instanz wiederherzustellen, müssen Sie zuerst die Enterprise-Features entfernen. Wenn Sie beispielsweise Datenkomprimierung verwenden oder die Datenerfassung ändern, müssen Sie diese Funktionen zunächst beenden und aus der Datenbank entfernen, die Datenbank sichern und sie dann in der Standard Edition-Instanz wiederherstellen. Sie können die DMV sys.dm_db_persisted_sku_features verwenden um zu überprüfen, ob Sie Funktionen nur für Unternehmen verwenden.

Für die Korruptionsfehler müssen Sie DBCC CHECKDB ausführen um das Ausmaß der Korruption zu bestimmen und von dort aus weiterzugehen. Wenn Sie Glück haben, liegt der Fehler in einem nicht gruppierten Index, den Sie neu erstellen und das Problem beheben können. Wenn die Beschädigung schwerwiegender ist, könnten Sie einen Wiederherstellungsvorgang in Erwägung ziehen. Um Korruption besser zu verstehen und verschiedene Aspekte der Korruption zu lösen, empfehle ich Ihnen, die verschiedenen Blog-Beiträge von Paul Randal zu lesen. Paul hat eine ganze Kategorie zum Thema Korruption, die Sie hier einsehen können:

  • http://www.sqlskills.com/blogs/paul/category/corruption/

Ausführen von DBCC CHECKDB im Rahmen eines regelmäßig geplanten Jobs gegen Ihre Datenbanken wird dringend empfohlen, um Beschädigungen so früh wie möglich zu erkennen. Wenn Sie nicht regelmäßig nach Beschädigungen suchen, besteht ein großes Risiko, dass Sie die beschädigten Daten nicht wiederherstellen können.

Fehler des Schweregrads 22

Ein Fehler mit Schweregrad 22 ist ein schwerwiegender Fehler, da die Tabellenintegrität verdächtig ist, was im Grunde darauf hinweist, dass die in der Nachricht angegebene Tabelle oder der Index beschädigt ist. Korruption passiert und passiert oft. Unserer Erfahrung nach tritt die Mehrzahl der Beschädigungen aufgrund eines Problems im Zusammenhang mit dem E/A-Subsystem auf. Wenn Sie auf einen Fehler mit Schweregrad 22 stoßen, müssen Sie DBCC CHECKDB ausführen um die Höhe des Schadens festzustellen. Ein Beispielfehler ist:

Fehler:5180, Schweregrad:22, Status:1
Konnte XYZ wegen ungültiger Datei-ID ## in Datenbank nicht öffnen. Tabelle oder Datenbank sind möglicherweise beschädigt.

Wenn der Fehler in einem nicht gruppierten Index auftritt, können Sie den Index einfach neu erstellen und die Beschädigung beheben. Wenn sich die Beschädigung in einem Heap- oder Clustered-Index befindet, müssen Sie die Datenbank in einen konsistenten Zustand zurückversetzen.

Ich habe Berichte gesehen, in denen die Beschädigung im Speicher, aber nicht auf der Festplatte war. In diesem Fall sollte ein Neustart der Instanz oder das Offline- und dann Online-Schalten der Datenbank den Fehler beheben.

Fehler des Schweregrads 23

Ein Fehler mit Schweregrad 23 ist ein weiterer schwerwiegender Fehler, der meldet, dass die Datenbank selbst ein Integritätsproblem hat. Die Lösung ähnelt der eines Fehlers mit Schweregrad 22, bei dem Sie sofort DBCC CHECKDB ausführen müssen um das volle Ausmaß des Schadens an der Datenbank zu ermitteln.

Es wird festgestellt, dass diese Beschädigungsstufe die gesamte Datenbank betrifft. Dies kann eine Beschädigung in der Datendatei selbst oder eine Beschädigung in der Protokolldatei sein. Die Details des Fehlers führen Sie zum eigentlichen Problem. Der folgende Fehler weist beispielsweise darauf hin, dass wir unsere Datenbank wiederherstellen oder versuchen müssten, das Protokoll neu zu erstellen. Aus Konsistenzgründen würde ich aus meiner letzten Sicherung und allen verfügbaren Transaktionsprotokollsicherungen wiederherstellen.

Fehler:9004, Schweregrad:23 Status:6
Beim Verarbeiten des Protokolls für die Datenbank „db_name“ ist ein Fehler aufgetreten. Wenn möglich, aus Backup wiederherstellen. Wenn keine Sicherung verfügbar ist, muss das Protokoll möglicherweise neu erstellt werden.

Fehler des Schweregrads 24

Ein Fehler mit Schweregrad 24 ist ein schwerwiegender Fehler im Zusammenhang mit einer Hardware. Diese Meldung würde aufgrund eines Medienfehlers auftreten. Die häufigsten dieser Arten von Fehlern, die ich gesehen habe, beziehen sich auf Probleme mit Speicher- und E/A-Fehlern. Zum Beispiel:

Fehler:832, Severity:24, State:1
Eine Seite, die konstant bleiben sollte, hat sich geändert (erwartete Prüfsumme:, tatsächliche Prüfsumme:, Datenbank , Datei , Seite ). Dies weist normalerweise auf einen Speicherfehler oder eine andere Beschädigung der Hardware oder des Betriebssystems hin.

Wenn Fehler wie dieser auftreten, sollten Sie sich an Ihr Systemsupport-Team wenden, um einen Speichertest auf Ihrem Server durchzuführen und den Server einer guten Zustandsprüfung zu unterziehen. Dieser Fehler könnte fehlerhafter Speicher oder ein Speicher-Scribbler sein (ein Kernel-Prozess oder etwas, das den Speicher von SQL Server ändert).

Ein weiteres Beispiel:

Fehler:824, Schweregrad:24, Status:2
SQL Server hat einen auf logischer Konsistenz basierenden E/A-Fehler erkannt:falsche Seiten-ID (erwartet 1:123; tatsächlich 0:0). Es ist beim Lesen der Seite (1:123) in der Datenbank-ID aufgetreten. Zusätzliche Meldungen im SQL Server-Fehlerprotokoll oder im Systemereignisprotokoll enthalten möglicherweise weitere Details.

Dieser Fehler weist auf einen Konsistenzfehler in der primären Datendatei der Datenbank hin. Sie müssten sofort DBCC CHECKDB ausführen um das Ausmaß der Beschädigung zu bestimmen und die entsprechenden Maßnahmen zur Reparatur oder Wiederherstellung der Datenbank zu ergreifen.

Schweregrad 25 Fehler

Ein Fehler mit Schweregrad 25 ist ein schwerwiegender Systemfehler. Ich habe gehört, dass Schweregrad 25 mehr oder weniger ein Sammelbegriff für verschiedene schwerwiegende Fehler ist. Ich habe diesen Fehler nur im Zusammenhang mit fehlgeschlagenen Upgrades gesehen:Etwas verhindert, dass eines der Upgrade-Skripts ausgeführt wird, und ein Fehler mit Schweregrad 25 wird ausgegeben. Sie würden eine Fehlermeldung ähnlich der folgenden erhalten:

Das Upgrade auf Skriptebene für die Datenbank „Master“ ist fehlgeschlagen, weil beim Upgrade-Schritt „sqlagent90_sysdbupg.sql“ der Fehler 598, Zustand 1, Schweregrad 25 aufgetreten ist. Dies ist eine schwerwiegende Fehlerbedingung, die den regulären Betrieb beeinträchtigen kann und die Datenbank offline geschaltet wird. Wenn der Fehler während des Upgrades der „Master“-Datenbank aufgetreten ist, wird der Start der gesamten SQL Server-Instanz verhindert. Untersuchen Sie die vorherigen Fehlerprotokolleinträge auf Fehler, ergreifen Sie die entsprechenden Korrekturmaßnahmen und starten Sie die Datenbank neu, damit die Skript-Upgrade-Schritte vollständig ausgeführt werden.

In diesem Fall zeigten Fehler vor dieser Meldung einen falschen Pfad für den Standarddatenspeicherort für SQL Server an. Nachdem dies behoben war, lief das Upgrade erfolgreich.

Fehler 825

Fehler 825 wird oft als Read-Retry-Warnung bezeichnet, die Bedingung gilt jedoch sowohl für Lese- als auch für Schreibvorgänge. Dieser Fehler informiert Sie darüber, dass eine Wiederholung des Vorgangs erforderlich war und wie oft SQL Server den Versuch wiederholen musste, bevor er erfolgreich war. SQL Server wiederholt die Vorgänge bis zu viermal, nach vier Wiederholungsversuchen wird ein 823- oder 824-Fehler ausgelöst. Fehler 825-Meldungen sehen etwa wie folgt aus:

Ein Lesen der Datei „Pfad zu Dateiname\db_name.mdf“ bei Offset 0x00000002000 war erfolgreich, nachdem es 2 Mal mit Fehler fehlgeschlagen war:falsche Prüfsumme (erwartet:XYZ; tatsächliches ABC). Zusätzliche Meldungen im SQL Server-Fehlerprotokoll und im Systemereignisprotokoll enthalten möglicherweise weitere Details. Diese Fehlerbedingung bedroht die Datenbankintegrität und muss behoben werden. Führen Sie eine vollständige Datenbankkonsistenzprüfung durch (DBCC CHECKDB). Dieser Fehler kann durch viele Faktoren verursacht werden; Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Diese Meldungen sind wichtig, da sie darauf hindeuten, dass Sie ein größeres Problem mit Ihrem Festplattensubsystem haben. Methoden zur Fehlerbehebung wären die Ausführung von DBCC CHECKDB um sicherzustellen, dass die Datenbank konsistent ist, wie es der Fehler empfiehlt, und überprüfen Sie die Windows-Ereignisprotokolle auf Fehler des Betriebssystems oder der Speichergeräte. Sie sollten Ihr Speicher- und Hardware-Supportteam bitten, auch das zugrunde liegende I/O-Subsystem auf Fehler zu überprüfen.

Zusammenfassung

Die Konfiguration von SQL Agent-Warnungen ist kostenlos und einfach. Proaktiv zu sein und auf diese Warnungen zu reagieren, ist wichtig, um Ausfallzeiten für Sie und Ihre Kunden zu minimieren. Wie Sie jetzt gelernt haben, können viele Dinge SQL Server und die Konsistenz Ihrer Datenbanken beeinträchtigen, und die beste Verteidigung, um diese Fehler beheben zu können, besteht darin, gute Backups zu haben und die verschiedenen Reparaturoptionen für DBCC CHECKDB . Es wird immer empfohlen, DBCC CHECKDB auszuführen regelmäßig mit Ihren Datenbanken vergleichen, um Beschädigungen so früh wie möglich zu erkennen, denn je schneller Sie eine Beschädigung finden, desto wahrscheinlicher ist es, dass Sie die Daten sichern, damit Sie sie ohne Datenverlust wiederherstellen können.