Reparieren von Datenbankbeschädigungen: GAM, SGAM, und IAM in SQL Server
Zusammenfassung: In diesem Artikel erfahren Sie, wie Sie kritische Datenbankbeschädigungen in SQL Server mit GAM-, SGAM- und IAM-Seiten diagnostizieren und reparieren können. Sie erfahren etwas über häufige Fehler, erhalten Einblicke in Diagnose-, Reparatur- und Präventionsstrategien und Lösungen wie Datenrettung oder Reparatursoftware von Drittanbietern. Außerdem erhalten Sie Tipps, wie Sie zukünftige Schäden verhindern können.
In SQL Server ist eine Seite die Grundeinheit für die Speicherung von Daten, und Extents sind die Grundeinheit, die eine effiziente Verwaltung von Seiten ermöglicht. Ein Extent ist eine Kombination aus acht physikalisch verbundenen Seiten. In SQL Server gibt es zwei Arten von Zuweisungsmaps, die zur Aufzeichnung des Zuweisungsumfangs verwendet werden – Global Allocation MAP (GAM) und Shared Global Allocation MAP (SGAM). Es gibt noch eine weitere Seite, die Index Allocation Map (IAM), die die von einer Zuweisungseinheit verwendeten Extents in dem 4 GB großen Teil der SQL Server-Datenbankdatei aufzeichnet. Manchmal werden diese SQL-Datenbankseiten aus verschiedenen Gründen beschädigt, so dass die beschädigte Datenbank repariert werden muss. In diesem Artikel erfahren Sie, wie Sie Probleme mit GAM-, SGAM- und IAM-Seiten in SQL Server diagnostizieren und reparieren können.
Was sind die Seiten GAM, SGAM und IAM?
Global Allocation Pages (GAM) sind für die Verwaltung von Zuweisungsbereichen in der Datenbank zuständig. Sie helfen bei Bedarf bei der Identifizierung freier Extents.
Shared Allocation Map (SGAM) Seiten sind wie granulare Karten. Sie verwalten die Zuordnung von Extents zu bestimmten Dateigruppen in der Datenbank.
Index Allocation Map (IAM) Seiten sind spezielle interne Seiten, die wie ein Register für die Datenspeicherung angemeldet sind. Sie verfolgen die Position der Datenseite in der Datenbankdatei.
Wie diagnostizieren Sie GAM-, SGAM- und IAM-Seitenfehler?
Wenn Sie Abfragen ausführen, erhalten Sie möglicherweise eine ähnliche Fehlermeldung wie diese:
Msg 8905, Ebene 16, Status 1, Zeile 1
Extent (5678:1234) in Datenbank ID 10 ist in der GAM als zugewiesen markiert, aber keine SGAM oder IAM hat ihn zugewiesen.
Dieser Fehler zeigt an, dass die GAM-Seite beschädigt ist.
Eine andere Möglichkeit, Fehler in Datenbankseiten zu erkennen, ist die Verwendung des DBCC CHECKDB-Befehls (siehe das folgende Beispiel).
DBCC CHECKDB (stellardb)
GO
Es gibt einen undokumentierten Befehl namens dbcc PAGE. Dies ist ein interner Befehl, der von Microsoft verwendet wird. Sie können ihn jedoch verwenden, um die Datenbankseiten zu diagnostizieren. Hier ist der Code zur Verwendung dieses Befehls.
DBCC PAGE (stellardb, 1, 354, WITH NOHEADER)
GO
Hier ist stellardb der Name der Datenbank, 1 ist die Dateinummer und 354 die Seitenzahl.
Wie behebt man eine Beschädigung der GAM-, SGAM- und IAM-Seiten in der SQL-Datenbank?
Hier finden Sie einige Lösungen zur Behebung von GAM-, SGAM- und IAM-Seitenfehlern sowie von Beschädigungen in der SQL-Datenbank.
Datenbank aus Sicherung wiederherstellen
Wenn Sie eine Sicherungskopie haben, können Sie diese verwenden, um Ihre Daten wiederherzustellen. Hier sind die Schritte zur Wiederherstellung einer Datenbanksicherung mit SQL Server Management Studio (SSMS):
- Gehen Sie in SQL Server Management Studio (SSMS) zum Objekt-Explorer und klicken Sie mit der rechten Maustaste auf Datenbanken.
- Wählen Sie dann die Option Datenbank wiederherstellen.
- Wählen Sie auf der Seite Allgemein die Option Gerät und drücken Sie dann auf die Schaltfläche Durchsuchen, um das Backup auszuwählen, und drücken Sie auf OK.
Verwenden Sie den Befehl DBCC CHECKDB
Um die GAM-, SGAM- und IAM-Seitenfehler und die Datenbankbeschädigung zu beheben, können Sie den Befehl DBCC CHECKDB in SQL Server verwenden. Hier ist der Code zur Reparatur der Datenbank mit dem Befehl DBCC CHECKDB:
USE master;
GO
ALTER DATABASE stellar
SET SINGLE_USER
MIT SOFORTIGEM ROLLBACK;
GO
DBCC CHECKDB('stellar',REPAIR_REBUILD)
GO
ALTER DATABASE stellar
SET MULTI_USER;
GO
Der obige Code greift auf die Master-Systemdatenbank zu, versetzt die Datenbank in den Einzelbenutzermodus, repariert die Datenbank und versetzt sie wieder in den Mehrbenutzermodus.
Verwenden Sie SQL-Datenbankreparatursoftware von Drittanbietern
Wenn der Befehl DBCC CHECKDB die Datenbank nicht reparieren kann, können Sie eine SQL-Reparatursoftware eines Drittanbieters verwenden, z.B. Stellar Repair for MS SQL. Diese Software kann SQL Server-Datenbankdateien (mdf und ndf) auf einfache Weise reparieren. Sie kann alle Daten aus beschädigten Datenbankdateien wiederherstellen und sie in einer neuen Datenbankdatei oder in verschiedenen anderen Formaten speichern.
Um die Datenbank mit Stellar Repair for MS SQL zu reparieren, gehen Sie wie folgt vor:
Hinweis: Nehmen Sie die Datenbank offline, bevor Sie den Reparaturvorgang starten.
- Laden Sie die Software von der offiziellen Website herunter.
- Installieren Sie die Software und starten Sie sie.
- Klicken Sie auf Durchsuchen, um die Datenbankdatei auszuwählen (Sie können die Schaltfläche Suchen verwenden, wenn Sie nicht wissen, wo die Datendatei gespeichert ist).
- Sobald Sie die Datei ausgewählt haben, klicken Sie auf die Schaltfläche Reparieren.
- Sobald die Daten repariert sind, können Sie sie in einer neuen Datenbank oder in anderen Formaten wie CSV, HTML und Excel speichern.
Bewährte Verfahren zur Vermeidung von GAM-, SGAM- und IAM-Site-Korruption
Hier finden Sie einige nützliche Tipps, die Sie befolgen können, um Schäden an den SQL Server-Datenbankseiten zu vermeiden:
- Überprüfen Sie Ihre Hardware, insbesondere Ihre Laufwerke, um sicherzustellen, dass sie in gutem Zustand sind. Tauschen Sie die Festplatten aus, wenn sie alt sind oder Fehler aufweisen. Wenn möglich, erstellen Sie ein Spiegel-RAID für Ihre SQL Server-Daten.
- Vermeiden Sie Viren und Malware-Angriffe. Installieren Sie unbedingt eine Antiviren- und Anti-Spam-Software.
- Sichern Sie Ihr Netzwerk mit den besten Firewalls und Netzwerksegmentierungen und verschlüsseln Sie Ihre Daten. Erstellen Sie bei Bedarf sichere VPN-Netzwerke.
- Stellen Sie sicher, dass Sie Ihr Betriebssystem und Ihre Software mit den neuesten Updates aktualisieren.
Fazit
Wenn die GAM-, SGAM- oder IAM-Seiten in der Datenbank beschädigt sind, ist es am einfachsten, die Datenbank vom letzten Backup wiederherzustellen. Wenn das Backup veraltet ist oder nicht funktioniert, können Sie versuchen, die Datenbank mit dem Befehl DBCC CHECKDB zu reparieren. In manchen Situationen funktioniert der DBCC CHECKDB-Befehl nicht. In diesem Fall können Sie Stellar Repair for MS SQL verwenden. Diese Software kann die beschädigte Datenbank einfach reparieren und alle Objekte mit vollständiger Integrität wiederherstellen.