Foutbericht wanneer u de OPDRACHT DBCC CHECKDB uitvoert op een computer die een SQL Server-database bevat

In dit artikel wordt beschreven hoe u het probleem kunt omzeilen dat optreedt wanneer u de DBCC CHECKDB opdracht uitvoert op een computer die een SQL Server database bevat.

Oorspronkelijke productversie: SQL Server 2008
Origineel KB-nummer: 960791

Symptomen

Neem het volgende scenario:

  • U herstelt een Microsoft SQL Server 2008- of SQL Server 2005-database vanuit een back-up.

  • U ontvangt fouten tijdens het herstelproces waardoor u de database niet kunt herstellen.

  • U kunt de database herstellen vanuit dezelfde back-up met behulp van de optie CONTINUE_AFTER_ERROR.

Wanneer u in dit scenario de opdracht DBCC CHECKDB uitvoert op de computer die de SQL Server database bevat, ontvangt u een foutbericht dat er ongeveer als volgt uitziet:

Msg 8967, niveau 16, status 216, servernaam<>, regel 2
Er is een interne fout opgetreden in DBCC die verdere verwerking verhinderde. Neem contact op met klantondersteuning.
DBCC-resultaten voor '<databasenaam>'.

Msg 8921, niveau 16, status 1, servernaam<>, regel 1

De controle is beƫindigd. Er is een fout gedetecteerd tijdens het verzamelen van feiten. Mogelijk heeft tempdb onvoldoende ruimte of is een systeemtabel inconsistent. Controleer eerdere fouten.

Bovendien kan een bericht dat er ongeveer als volgt uitziet, worden weergegeven in het SQL Server foutenlogboek:

2007-05-26 07:13:49.21 spid58 DBCC heeft een pagina aangetroffen met een LSN die groter is dan de huidige LSN (<LSN>) voor de momentopname van de interne database. Kan pagina (bestands-id:pagina-id), databasenaam< (database-id database-id>), LSN = (<LSN>), type = 32, isInSparseFile = 1 niet lezen. Voer deze DBCC-opdracht opnieuw uit.

Oorzaak

Dit probleem treedt op als de DBCC CHECKDB opdracht niet de benodigde controles kan uitvoeren om de consistentie van de database te bevestigen. Deze controles kunnen om verschillende redenen niet worden uitgevoerd. Dit gedrag kan bijvoorbeeld optreden als er fundamentele inconsistenties in de database zijn, zoals inconsistenties in metagegevens of beschadiging van de momentopname van de database. Meer informatie over de specifieke oorzaak van deze fout kan worden bepaald door de verschillende status te onderzoeken die in het foutbericht wordt weergegeven. In het scenario dat wordt beschreven in de sectie Symptomen , geeft het bericht status 216 aan dat de DBCC CHECKDB opdracht een pagina uit de interne momentopname leest met een groter logboekreeksnummer (LSN) dan het einde van logboek-LSN. Dit gedrag kan optreden als u databases herstelt met behulp van de optie CONTINUE_AFTER_ERROR .

Tijdelijke oplossing

Als u dit probleem wilt omzeilen, gebruikt u de TABLOCK-hint met de DBCC CHECKDB opdracht. Hierdoor kan de DBCC CHECKDB opdracht worden voltooid zonder het foutbericht te genereren.

Ga voor meer informatie over TABLOCK-hints naar de volgende Microsoft-website: Hints (Transact-SQL) - Table.