Messaggio di errore quando si esegue il comando DBCC CHECKDB in un computer che contiene un database SQL Server

Questo articolo illustra il problema che si verifica quando si esegue il DBCC CHECKDB comando in un computer che contiene un database SQL Server.

Versione originale del prodotto: SQL Server 2008
Numero KB originale: 960791

Sintomi

Considerare lo scenario descritto di seguito:

  • Si ripristina un database microsoft SQL Server 2008 o SQL Server 2005 da un backup.

  • Durante il processo di ripristino vengono visualizzati errori che impediscono il ripristino del database.

  • È possibile ripristinare correttamente il database dallo stesso backup usando l'opzione CONTINUE_AFTER_ERROR.

In questo scenario, quando si esegue il comando DBCC CHECKDB nel computer che contiene il database SQL Server, viene visualizzato un messaggio di errore simile al seguente:

Msg 8967, Livello 16, Stato 216, <Nome> server, Riga 2
Si è verificato un errore interno in DBCC che ha impedito un'ulteriore elaborazione. Contattare il supporto tecnico.
Risultati DBCC per '<nome> database'.

Msg 8921, Livello 16, Stato 1, <Nome> server, Riga 1

Controllo terminato. È stato rilevato un errore durante la raccolta dei fatti. È possibile che tempdb non sia disponibile nello spazio o che una tabella di sistema sia incoerente. Controllare gli errori precedenti.

Inoltre, nel log degli errori di SQL Server potrebbe essere visualizzato un messaggio simile al seguente:

2007-05-26 07:13:49.21 spid58 DBCC ha rilevato una pagina con un LSN maggiore della fine corrente del log LSN (<LSN>) per lo snapshot interno del database. Impossibile leggere la pagina (id file:id pagina), il database '<nome database' (ID> database ID database), LSN = (<LSN>), tipo = 32, isInSparseFile = 1. Eseguire di nuovo questo comando DBCC.

Causa

Questo problema si verifica se il DBCC CHECKDB comando non è in grado di eseguire i controlli necessari per confermare la coerenza del database. Non è stato possibile eseguire questi controlli per molti motivi. Ad esempio, questo comportamento può verificarsi se nel database sono presenti incoerenze fondamentali, ad esempio incoerenze di metadati o danneggiamento dello snapshot del database. Altre informazioni sulla causa specifica di questo errore possono essere determinate esaminando il diverso stato visualizzato nel messaggio di errore. Nello scenario descritto nella sezione Sintomi , il messaggio di stato 216 indica che il DBCC CHECKDB comando legge una pagina dallo snapshot interno con un numero di sequenza di log maggiore (LSN) rispetto alla fine del log LSN. Questo comportamento può verificarsi se si ripristinano i database usando l'opzione CONTINUE_AFTER_ERROR .

Soluzione alternativa

Per risolvere questo problema, usare l'hint TABLOCK con il DBCC CHECKDB comando . In questo modo il DBCC CHECKDB comando viene completato senza generare il messaggio di errore.

Per altre informazioni sugli hint TABLOCK, visitare il seguente sito Web Microsoft: Hints (Transact-SQL) - Table.