Freigeben über


Fehlermeldung beim Ausführen des DBCC CHECKDB-Befehls für eine SQL Server-Datenbank

In diesem Artikel werden Sie das Problem umgehen, das auftritt, wenn Sie den Befehl auf einem Computer ausführen, der DBCC CHECKDB eine SQL Server-Datenbank enthält.

Ursprüngliche Produktversion: SQL Server 2005 und höhere Versionen Ursprüngliche KB-Nummer: 960791

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie stellen eine Microsoft SQL Server-Datenbank aus einer Sicherung wieder her.

  • Während des Wiederherstellungsvorgangs erhalten Sie Fehler, die verhindern, dass Sie die Datenbank wiederherstellen.

  • Sie stellen die Datenbank mithilfe der Option CONTINUE_AFTER_ERROR erfolgreich aus derselben Sicherung wieder her.

Wenn Sie in diesem Szenario den BEFEHL DBCC CHECKDB auf dem Computer ausführen, der die SQL Server-Datenbank enthält, erhalten Sie eine Fehlermeldung, die etwa wie folgt aussieht:

Msg 8967, Level 16, State 216, Serverservername<>, Zeile 2
In DBCC ist ein interner Fehler aufgetreten, der die weitere Verarbeitung verhinderte. Wenden Sie sich an den Kundensupport.
DBCC-Ergebnisse für '<Datenbankname>'.

Msg 8921, Level 16, State 1, Serverservername<>, Zeile 1

Die CHECK-Anweisung wurde beendet. Fehler beim Sammeln von Fakten. Möglicherweise ist kein freier Speicherplatz mehr in 'tempdb' vorhanden, oder eine Systemtabelle ist inkonsistent. Überprüfen Sie die vorherigen Fehler.

Darüber hinaus wird eine Meldung, die dem folgenden ähnelt, möglicherweise im SQL Server-Fehlerprotokoll angezeigt:

2007-05-26 07:13:49.21 spid58 DBCC hat eine Seite mit einem LSN über dem aktuellen Ende des Log LSN (<LSN>) für die interne Datenbankmomentaufnahme gefunden. Seite konnte nicht gelesen werden (Datei-ID:Seite-ID), Datenbank '<Datenbankname' (Datenbank-ID Datenbank-ID>), LSN = (<LSN>), Typ = 32, isInSparseFile = 1. Führen Sie diesen DBCC-Befehl erneut aus.

Ursache

Dieses Problem tritt auf, wenn der DBCC CHECKDB Befehl die erforderlichen Prüfungen nicht ausführen kann, um die Konsistenz der Datenbank zu bestätigen. Diese Prüfungen konnten aus vielen Gründen nicht durchgeführt werden. Dieses Verhalten kann z. B. auftreten, wenn in der Datenbank grundlegende Inkonsistenzen auftreten, z. B. Metadateninkonsistenzen oder Beschädigungen von Datenbankmomentaufnahmen. Weitere Informationen zur spezifischen Ursache dieses Fehlers können durch Untersuchen des unterschiedlichen Zustands bestimmt werden, der in der Fehlermeldung angezeigt wird. In dem Szenario, das im Abschnitt "Symptome " beschrieben wird, gibt die Meldung "Status 216" an, dass der DBCC CHECKDB Befehl eine Seite aus der internen Momentaufnahme liest, die eine größere Logsequenznummer (Log Sequence Number, LSN) als das Ende des Protokoll-LSN aufweist. Dieses Verhalten kann auftreten, wenn Sie Datenbanken mithilfe der Option CONTINUE_AFTER_ERROR wiederherstellen.

Problemumgehung

Um dieses Problem zu umgehen, verwenden Sie den TABLOCK-Hinweis mit dem DBCC CHECKDB Befehl. Dadurch kann der DBCC CHECKDB Befehl beendet werden, ohne die Fehlermeldung zu generieren.

Weitere Informationen zu TABLOCK-Hinweisen finden Sie unter Hinweise (Transact-SQL) - Tabelle.