SQL Server 2008 kann die Konsistenz nicht reparieren

7

Ich habe ein Problem mit einer SQL Server 2008-Datenbank.

Starten

DBCC CHECKDB

Ich erhalte diesen Fehler:

SQL Server hat einen logischen konsistenzbasierten E / A-Fehler festgestellt: falsche Prüfsumme (erwartet: 0xd2e00940; tatsächlich: 0x925ef494). Es trat beim Lesen der Seite (1: 15215) in der Datenbank-ID 22 am Offset 0x000000076de000 in der Datei 'C: \ Programme \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ file.mdf' auf. Zusätzliche Meldungen im SQL Server-Fehlerprotokoll oder im Systemereignisprotokoll enthalten möglicherweise weitere Details. Dies ist eine schwerwiegende Fehlerbedingung, die die Datenbankintegrität gefährdet und sofort behoben werden muss. Führen Sie eine vollständige Datenbankkonsistenzprüfung (DBCC CHECKDB) durch. Dieser Fehler kann durch viele Faktoren verursacht werden. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Ich habe die Tabelle gefunden, die das Problem verursacht hat:

DBCC CHECKTABLE

Meldung 824, Ebene 24, Status 2, Zeile 8
SQL Server hat einen logischen konsistenzbasierten E / A-Fehler festgestellt: falsche Prüfsumme (erwartet: 0xd2e00940; tatsächlich: 0x925ef494). Es trat beim Lesen der Seite (1: 15215) in der Datenbank-ID 22 am Offset 0x000000076de000 in der Datei 'C: \ Programme \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ file.mdf' auf. Zusätzliche Meldungen im SQL Server-Fehlerprotokoll oder im Systemereignisprotokoll enthalten möglicherweise weitere Details. Dies ist eine schwerwiegende Fehlerbedingung, die die Datenbankintegrität gefährdet und sofort behoben werden muss.

Führen Sie eine vollständige Datenbankkonsistenzprüfung (DBCC CHECKDB) durch. Dieser Fehler kann durch viele Faktoren verursacht werden. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Also habe ich es mit den Reparaturarbeiten versucht:

DBCC CHECKTABLE (table_name, REPAIR_ALLOW_DATA_LOSS)

aber ich bekomme den gleichen Fehler:

Meldung 824, Ebene 24, Status 2, Zeile 8
SQL Server hat einen logischen konsistenzbasierten E / A-Fehler festgestellt: falsche Prüfsumme (erwartet: 0xd2e00940; tatsächlich: 0x925ef494). Es trat beim Lesen der Seite (1: 15215) in der Datenbank-ID 22 am Offset 0x000000076de000 in der Datei 'C: \ Programme \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ file.mdf' auf. Zusätzliche Meldungen im SQL Server-Fehlerprotokoll oder im Systemereignisprotokoll enthalten möglicherweise weitere Details. Dies ist eine schwerwiegende Fehlerbedingung, die die Datenbankintegrität gefährdet und sofort behoben werden muss.

Führen Sie eine vollständige Datenbankkonsistenzprüfung (DBCC CHECKDB) durch. Dieser Fehler kann durch viele Faktoren verursacht werden. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Ich habe auch versucht, die Datenbank in den SINGLE_USER-Modus zu versetzen, aber ohne Ergebnis.

Ich kann die Tabelle weder löschen noch abschneiden. Da bekomme ich immer den gleichen Fehler.

Die Tabelle unterliegt keinen Einschränkungen. Es hat einen PK und einen Index, aber ich kann keinen von ihnen löschen.

Enrico
quelle
7
Haben Sie ein Backup, das noch gut ist? Möglicherweise müssen Sie WITH REPAIR_ALLOW_DATA_LOSS verwenden oder zu einer guten Sicherung zurückkehren. Siehe sqlskills.com/blogs/paul/… und sqlskills.com/blogs/paul/…
Aaron Bertrand
Wenn dies eine große Datenbank ist und Sie gute Backups haben, würde ich versuchen, eine einzelne Seite wiederherzustellen, und prüfen, ob dies das Problem behebt.
Jon Seigel
Ich habe bereits versucht, die Reparatur MIT REPAIR_ALLOW_DATA_LOSS durchzuführen, aber sie funktioniert nicht und gibt mir eine Fehlermeldung zurück. Ich habe kein gutes Backup für die gesamte Datenbank. Ist es möglich, nur die fehlerhafte Tabelle aus einer einfachen Sicherung wiederherzustellen?
Enrico

Antworten:

4

Sie müssen die Seite aus einer vollständigen Sicherung wiederherstellen und dann die Protokolle auf die aktuelle Seite weiterleiten, oder Sie müssen eine vollständige Wiederherstellung durchführen.

Ich würde auch chkdsk ausführen, da es den Anschein hat, dass Sie ein Festplattenproblem haben, da dieselbe Seite Probleme meldet, wenn Sie versuchen, es zu reparieren. Führen Sie auch alle Datenträgerverwaltungstools aus und prüfen Sie, ob sie Probleme mit der Festplatte melden.

mrdenny
quelle
Vielen Dank für Ihre Antwort. Ich habe kein vollständiges Backup, weil ich nur einfache habe. Andernfalls würde es mir nichts ausmachen, die falsche Tabelle zu verlieren oder zu löschen, aber ich kann sie nicht löschen oder löschen. Wie kann ich das Löschen der Tabelle erzwingen? Vielen Dank!
Enrico
Bitte definieren Sie eine einfache Sicherung, da dies keine SQL Server-Terminologie ist.
Mrdenny
Es tut mir leid, Sie haben Recht, ich habe über das Wiederherstellungsmodell gesprochen.
Enrico
@Enrico Haben Sie also eine vollständige Sicherung der Datenbank?
Marian
2
Da Sie sich in einer einfachen Wiederherstellung befinden, ist eine vollständige Wiederherstellung Ihre einzige Option. Wären Sie vollständig wiederhergestellt und hätten Transaktionsprotokollsicherungen durchgeführt, hätten Sie möglicherweise nur die Seite anstelle der gesamten Datenbank wiederherstellen können. Dies ist eine der bekannten Einschränkungen des einfachen Wiederherstellungsmodells.
Mrdenny
0

Ich habe keine schnelle Lösung gefunden und mich von einem Backup erholt. Ich habe eine Datenbank erstellt, die eine alte Sicherung wiederherstellt. Dann habe ich die Daten in der neuen Datenbank aktualisiert und sie aus der fehlerhaften Datenbank importiert, wobei die fehlerhaften Tabellen umgangen wurden. Schließlich habe ich die kaputte DB durch die neue ersetzt. Danke für deine Hilfe.

Enrico
quelle