Fehlermeldung beim Ausführen des DBCC CHECKDB-Befehls auf einem Computer, der eine SQL Server Datenbank enthält

In diesem Artikel wird erläutert, wie 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 2008
Ursprüngliche KB-Nummer: 960791

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

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

  • Während des Wiederherstellungsvorgangs erhalten Sie Fehler, die sie daran hindern, die Datenbank wiederherzustellen.

  • Sie können die Datenbank mithilfe der Option CONTINUE_AFTER_ERROR erfolgreich aus derselben Sicherung wiederherstellen.

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 der folgenden ähnelt:

Msg 8967, Ebene 16, Status 216, Serverservername<>, Zeile 2
In DBCC ist ein interner Fehler aufgetreten, der die weitere Verarbeitung verhindert hat. Wenden Sie sich an den Kundensupport.
DBCC-Ergebnisse für "Datenbankname>"<.

Msg 8921, Ebene 16, Status 1, Serverservername<>, Zeile 1

Überprüfen Sie beendet. Beim Sammeln von Fakten wurde ein Fehler erkannt. Möglicherweise ist tempdb nicht verfügbar, oder eine Systemtabelle ist inkonsistent. Überprüfen Sie vorherige Fehler.

Darüber hinaus kann eine Meldung, die der folgenden ähnelt, im SQL Server Fehlerprotokoll angezeigt werden:

2007-05-26 07:13:49.21 spid58 DBCC hat eine Seite mit einer LSN gefunden, die größer ist als die aktuelle LSN (<LSN>) für die interne Datenbank-Momentaufnahme. Seite konnte nicht gelesen werden (Datei-ID:Seiten-ID), Datenbankname< (Datenbank-ID der 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 nicht die erforderlichen Überprüfungen durchführen kann, um die Konsistenz der Datenbank zu bestätigen. Diese Überprüfungen konnten aus vielen Gründen nicht durchgeführt werden. Dieses Verhalten kann beispielsweise auftreten, wenn grundlegende Inkonsistenzen in der Datenbank vorliegen, z. B. Metadateninkonsistenzen oder Datenbank-Momentaufnahme Beschädigung. Weitere Informationen zur spezifischen Ursache dieses Fehlers können durch Untersuchen des unterschiedlichen Zustands ermittelt 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 dem internen Momentaufnahme liest, die eine größere Protokollsequenznummer (Log Sequence Number, LSN) als das Ende der 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 abgeschlossen werden, ohne die Fehlermeldung zu generieren.

Weitere Informationen zu TABLOCK-Hinweisen finden Sie auf der folgenden Microsoft-Website: Hinweise (Transact-SQL) – Tabelle.