Inhaltsverzeichnis
    SQL-Datenbank-Reparatur

    Wie behebt man eine Seitenbeschädigung in SQL Server?


    Inhaltsverzeichnis

      Zusammenfassung: In diesem Beitrag werden wir über die Grundursache für die Beschädigung der Seitenebene in SQL Server sprechen. Wir werden auch die Möglichkeiten zur Behebung der Beschädigung und Wiederherstellung der Datenbank diskutieren. Außerdem erfahren Sie etwas über eine SQL-Datenbankreparatursoftware, mit der Sie eine beschädigte Datenbank leicht reparieren und alle Objekte wiederherstellen können.

      Datenbanken können jederzeit beschädigt werden, was für Datenbankadministratoren ein besorgniserregendes Problem darstellt, da dadurch alle wichtigen Daten auf dem SQL-Server gefährdet sind. Außerdem werden die Daten unzugänglich, was sich auf den Arbeitsablauf des Unternehmens auswirkt. Daher ist es wichtig, die Beschädigung sofort zu beheben. Genauso wichtig ist es jedoch, die Ursachen der Korruption zu verstehen, da sie sonst erneut auftreten kann. In diesem Blog finden Sie wichtige Informationen darüber, wie Sie die Beschädigung von Seiten in SQL Server beheben können.

      Ursachen für die Beschädigung der SQL Server-Ebene

      Hier sind einige wichtige Gründe, die zu einer Beschädigung der SQL Server-Datenbank führen können.

      1. Softwarefehler im SQL Server-Programm: In diesem Fall werden die Daten schlecht auf die Festplatte geschrieben. Sehen Sie sich diese Microsoft-Dokumente an:

      Wir können diese Art von Problemen vermeiden, indem wir das letzte kumulative Update (CU) der SQL Server-Version installieren.

      1. Speicherprobleme: Es handelt sich um Hardwareprobleme, die das gesamte System und nicht nur den MS SQL Server betreffen können. Es gibt Programme zur Überprüfung der Korrektheit der Daten im Speicher.
      2. Probleme mit dem E/A-Subsystem: In diesem Fall ist es nicht einfach, die Ursache des Problems zu verstehen, da das Speichersystem eine komplizierte Architektur aufweisen kann. Bevor wir beispielsweise auf die physische Festplatte schreiben, müssen wir möglicherweise ein Netzwerk durchqueren oder wir haben einen Festplatten-Controller und seine Treiber. Jede dieser Komponenten kann ausfallen.
      3. Plötzliches Herunterfahren des Servers: Es besteht ein erhebliches Risiko, dass die Datenbank beschädigt wird, wenn der Server aus irgendeinem Grund plötzlich ausfällt. Dies kann durch einen physischen Ausfall des Servers oder durch Strommangel geschehen.

      Wie erkennt man Beschädigungen auf Seitenebene in SQL Server?

      MS SQL Server-Datenbanken bestehen aus 8-KB-Seiten mit Daten. Acht physisch zusammenhängende Seiten bilden eine Erweiterung, die 64 KB groß ist. Seitenbeschädigung bedeutet, dass eine oder mehrere Seiten falsche Werte enthalten.

      Wenn die Datenbank beschädigt ist, können wir dies auf drei Arten überprüfen:

      1. Die Ausführung der SELECT-Anweisung auf die beschädigte Tabelle zeigt einen Fehler

       SELECT statement on the corrupted table

      In diesem Fall wird eine Fehlermeldung angezeigt:

      • Die Art des Fehlers (in diesem Fall handelt es sich um einen auf logischer Konsistenz basierenden E/A-Fehler, der durch eine falsche Prüfsumme verursacht wurde).
      • Die Seite, auf der der Fehler gefunden wird (Seite 1:368).
      • Der Offset, bei dem der Fehler gefunden wurde (0x00000002e0000).
      • Die ID der beschädigten Datenbank (ID=31).

      2. Führen Sie die Anweisung DBCC CHECKDB aus

      Dieser Befehl prüft die physische und logische Integrität von Datenbankobjekten, Indexbeziehungen und andere Strukturprüfungen. Geben Sie einfach DBCC CHECK mit dem Namen der Datenbank in runden Klammern ein.

      Führen Sie die Anweisung DBCC CHECKDB aus

      In diesem Fall wird der Fehler angezeigt:

      • Die Anzahl der beschädigten Seiten (Seite 1:368).
      • Der Name der korrumpierten Tabelle (Person).

      3. Führen Sie SELECT auf der Tabelle [msdb].[dbo].[suspect_pages] aus

       Führen Sie SELECT auf der Tabelle

      Der SELECT-Befehl gibt ein Raster mit einer Zeile für jede beschädigte Seite zurück. In diesem Fall können wir sehen, dass in der Datenbank mit ID = 31 die Seite 1:368 beschädigt ist.

      Wie behebt man eine Beschädigung auf Seitenebene in SQL Server?

      Hier haben wir zwei verschiedene Möglichkeiten zur Reparatur und Wiederherstellung der Datenbank erwähnt.

      1. Manuelle Wiederherstellung über T-SQL-Befehle

      Hinweis: Erstellen Sie eine Sicherungskopie der Datenbanken und/oder eine Kopie der physischen Dateien, bevor Sie fortfahren. Der manuelle Prozess ist riskant.

      Um mit der Wiederherstellung manuell über T-SQL-Befehle fortzufahren, um die Seitenbeschädigung im SQL-Server zu beheben, folgen Sie den unten stehenden Anweisungen.

      Verwenden Sie den undokumentierten Befehl DBCC IND, um sicherzustellen, dass Seite 368 eine Datenseite ist.

      DBCC IND('Wiederherstellung_test',Person,-1)

      Dieser Befehl zeigt alle Seiten an, die sich auf die im zweiten Parameter angegebene Tabelle beziehen, mit den Informationen, die sich auf die Art der Seite beziehen. Im folgenden Beispiel,

      • Die erste Zeile hat den Seitentyp 10. Es handelt sich also um die Seite “Index Allocation Map” (IAM).
      • Die zweite Zeile hat den Seitentyp 1. Sie zeigt an, dass die Seite 368 Daten enthält.
      Die zweite Zeile hat den Seitentyp 1

      Um die in Seite 1:368 enthaltenen Daten anzuzeigen, können wir die Datei recovery_test.mdf mit einem Hex-Editor öffnen und zum Offset 2e0000 gehen.

      Das rote Zeichen ‘b’ (siehe Bild unten) sieht verdächtig aus, da mein Name “Luca” und nicht “Lucb” lautet.

      verdächtig aussehen

      2. Verwenden Sie den Befehl DBCC PAGE:

      Um das Ergebnis des DBCC PAGE-Befehls zu erhalten, muß zunächst das Trace-Flag 3604 gesetzt werden.

      DBCC TRACEON (3604)
      DBCC PAGE('Recovery_test',1,368,2) WITH TABLERESULTS

      Die erforderlichen Parameter sind:

      • Name der Datenbank
      • Nummer der Datei
      • Nummer der Seite
      • PRINTOPT

      Die Werte für den Parameter printopt sind:

      • 0 – Es wird der Kopfteil der Seite gedruckt.
      • 1 – Kopfzeile der SQL-Seite mit Hex-Dumps pro Zeile.
      • 2 – Seitenkopfdetails mit vollständigem Hex-Dump der Seite.
      • 3 – Kopfzeile der Seite mit Beschreibung der Interpretation pro Zeile.

      Die angezeigten Daten sind dieselben.

      Die angezeigten Daten sind dieselben.

      Wir müssen den Zeichenwert vom Hex-Wert 62 (b) in den Hex-Wert 61 (a) ändern.

      Wir können einen anderen undokumentierten Befehl verwenden, nämlich den Befehl DBCC WRITEPAGE. Dies ist ein leistungsfähiger Befehl, mit dem man direkt auf eine Seite schreiben kann.

      Um den Befehl DBCC WRITEPAGE zu verwenden, benötigen wir die folgenden Informationen:

      • Der erste Parameter ist der Name der Datenbank.
      • Die zweite und dritte sind die fileId und die PageId, die ich ändern muss (1: 368).
      • Der vierte Parameter ist der Offset (hex.74 -> 116 dez.) und der fünfte ist die Anzahl der zu schreibenden Zeichen (1).
      • Der sechste Parameter ist der Wert, den ich schreiben muss. In unserem Fall ist es 0x000000.
      • Der siebte Parameter gibt an, ob der Wert über den Pufferpool geschrieben werden soll. Wir setzen den Wert 1, um direkt in die physische mdf-Datei zu schreiben.

      Versetzen Sie die Datenbank zunächst in den SINGLE_USER-Modus:

      ALTER DATABASE recovery_test SET SINGLE_USER WITH ROLLBACK IMMEDIATE

      Führen Sie dann den Befehl WRITEPAGE aus:

      DBCC WRITEPAGE ('recovery_test', 1, 368, 116, 1, 0x61,1)

      Führen Sie es nun erneut aus, um zu sehen, ob sich die Daten geändert haben:

      DBCC TRACEON (3604)
      DBCC PAGE('Recovery_test',1,368,2) WITH TABLERESULTS

      Ja, die Daten haben sich geändert.

      Ja, die Daten haben sich geändert.

      Versetzen Sie die Datenbank in den MULTI_USER-Modus:

      ALTER DATABASE recovery_test SET MULTI_USER WITH ROLLBACK IMMEDIATE

      Überprüfen Sie den Gesundheitszustand der Datenbank:

      DBCC CHECKDB ('recovery_test')

      Aus dem Protokoll geht hervor, dass keine Fehler aufgetreten sind. Das bedeutet, dass die Datenbank nicht mehr beschädigt ist.

      die Datenbank ist nicht mehr beschädigt

      Reparieren Sie die Datenbank mit Stellar Repair für MS SQL

      Bedenken wir, dass das Problem, das wir manuell gelöst haben, ein bemerkenswert einfacher Fall ist. Aber die Reparatur von komplexen Korruptionsfällen erfordert fortgeschrittene Kenntnisse und birgt das Risiko von mehr Datenschäden. Eine spezielle Anwendung wie Stellar Repair for MS SQL kann jedoch das gleiche Problem auf sichere und schnelle Weise lösen. Nur ein paar einfache Schritte sind erforderlich, um eine beschädigte Datenbank wiederherzustellen. Diese sind:

      • Starten Sie die Anwendung Stellar Repair for MS SQL.
      • Beim Start der Anwendung werden Sie aufgefordert, die wiederherzustellende Datenbank auszuwählen. Geben Sie eine Datei mit der Erweiterung .mdf an.
      • Dann können Sie auch gelöschte Datensätze wiederherstellen.
      Sie können auch gelöschte Datensätze wiederherstellen
      • Drücken Sie die Taste Reparieren.
      • Es gibt zwei Arten der Wiederherstellung: Standard und Erweitert.
      zwei Arten der Einziehung

      Die Datenbankstruktur wird zur Reparatur gescannt. Ein Fortschrittsbalken zeigt den Fortschritt des Auftrags an.

      Fortschrittsbalken zeigt den Fortschritt des Auftrags an
      • Das Ergebnis dieser Scanphase wird gespeichert. Sie können es also wiederverwenden. Auf der grafischen Oberfläche können wir alle Datenbankobjekte sehen.
      • Der letzte Schritt besteht darin, die wiederhergestellten Daten zu speichern. Wir können die Daten in eine neue Datenbank, eine bestehende Datenbank oder in einem anderen Format (CSV, XLS oder HTML) speichern.
      • Wenn Sie die Option Neue Datenbank wählen, werden Sie nach dem Namen der zu erstellenden Datenbank gefragt. Die Daten werden in die erstellte Datenbank kopiert.
      Neue Datenbankoption

      Zum Abschluss

      Die SQL-Datenbank wird aus einer Vielzahl von Gründen beschädigt. In diesem Beitrag haben wir die Ursachen für eine Beschädigung auf Seitenebene in SQL Server besprochen. Wir haben auch gesehen, wie man die Beschädigung in der Datenbank erkennt und wie man die beschädigte Datenbank manuell über T-SQL-Befehle und mit SQL-Reparatursoftware repariert. Die Software kann eine lobenswerte Arbeit leisten, um das Problem zu lösen und die Datenbank wieder in einen perfekten Betriebszustand zu bringen.

      Was this article helpful?

      No NO

      Über den Autor

      Himanshu Shakya

      Himanshu is a Tech Enthusiast & Blogger at Stellar and having knowledge of Japanese Language. And apart from this in his spare time he likes playing Chess.

      Verwandter Beitrag

      WARUM STELLAR® WELTWEIT FÜHREND IST

      Warum Stellar wählen?

      • 0M+

        Kunden

      • 0+

        Jahre der Exzellenz

      • 0+

        F&E-Ingenieure

      • 0+

        Länder

      • 0+

        PARTNER

      • 0+

        Erhaltene Auszeichnungen