DBCC CHECKDB in Sql Server

DBCC CHECKDB in SQL Server 2019.

DBCC CHECKDB in SQL Server viene spesso utilizzato da molti amministratori di database (DBA) di SQL Server per identificare gli errori nel database.

In questo articolo verrà illustrato come utilizzare DBCC CHECKDB per ripristinare il database SQL Server.

Che cos’è DBCC CHECKDB in SQL Server

Database Console Command CHECKDB (DBCC CHECKDB) viene utilizzato per verificare l’integrità (fisica e logica) degli oggetti in un database SQL Server.

Il comando è supportato nei database che contengono tabelle ottimizzate per la memoria, ma la convalida è supportata solo nelle tabelle basate su disco.

L’opzione di ripristino DBCC non è disponibile nelle tabelle ottimizzate per la memoria e, pertanto, comporta la necessità di un normale backup del database. Nel caso in cui si verifica un problema in una tabella ottimizzata per la memoria, i dati possono essere ripristinati dall’ultimo backup eseguito.

Quando si lancia il comando Sql il sistema verifica l’integrità logica e fisica di tutti gli oggetti del database specificato eseguendo le operazioni seguenti:

  • Esegue DBCC CHECKALLOC nel database.
  • Esegue DBCC CHECKTABLE in ogni tabella e vista del database.
  • Esegue DBCC CHECKCATALOG nel database.
  • Convalida del contenuto di ogni vista indicizzata nel database.
  • Convalida la coerenza a livello di collegamenti tra i metadati della tabella e le directory e i file del file system quando vengono archiviati dati varbinary(max) nel file system usando FILESTREAM.
  • Convalida dei dati di Broker di servizio nel database.

Non è pertanto necessario eseguire i comandi DBCC CHECKALLOC, DBCC CHECKTABLE o DBCC CHECKCATALOG separatamente da DBCC CHECKDB. 

Come utilizzare DBCC CHECKDB in SQL Server

Il comando DBCC CHECKDB è piuttosto semplice. Ci sono alcune opzioni che puoi usare con l’istruzione e le vedremo successivamente:

DBCC CHECKDB ('DatabaseName') 

Vediamo come comportarci in caso di un db corrotto.

Passaggio 1: Impostare il database sulla modalità di emergenza

Modificare lo stato del database in modalità EMERGENCY, che fornisce un accesso in sola lettura all’amministratore. Per mettere il database in modalità EMERGENCY, eseguire la query seguente in SSMS:

ALTER DATABASE [NomeDB] SET EMERGENCY

Passaggio 2: Impostare il database in modalità utente singolo

Prima di utilizzare le opzioni di ripristino DBCC CHECKDB, mettere il database in modalità SIGLE USER in modo da impedire ad altri utenti di modificare i dati durante il processo di ripristino. Per impostare la modalità database SQL su SINGLE_USER, lanciare il comando:

ALTER DATABASE NomeDB SET SINGLE_USER 

Passaggio 3: Verificare la presenza di errori

Una volta che l’amministratore è in grado di accedere al database, eseguire il seguente comando DBCC CHECKDB per analizzare gli errori di danneggiamento nel database:

DBCC CHECKDB (NomeDB) 
Errori DBCC CHECKDB in Sql Server
Errori DBCC CHECKDB in Sql Server

Se DBCC CHECKDB rileva eventuali errori nel database, consiglierà le opzioni di ripristino appropriate per risolvere il problema.

Opzioni DBCC CHECKDB in SQL Server

Ci sono alcune opzioni da usare con DBCC CHECKDB e ne andrò su alcune delle più popolari qui:

  • NOINDEX – Specifica che non devono essere eseguiti controlli intensivi degli indici non cluster per le tabelle utente. Ciò riduce il tempo di esecuzione complessivo. NOINDEX non influisce sulle tabelle di sistema perché i controlli di integrità vengono sempre eseguiti sugli indici delle tabelle di sistema.
  • NO_INFOMSGS – Elimina tutti i messaggi informativi.
  • PHYSICAL_ONLY – Limita il controllo all’integrità della struttura fisica delle intestazioni di pagina e di record e alla coerenza di allocazione del database. Questo controllo è progettato per fornire un piccolo controllo overhead della coerenza fisica del database, ma può anche rilevare errori di checksum e errori hardware comuni che possono compromettere i dati di un utente.
  • TABLOCK – Fa sì che DBCC CHECKDB ottenga blocchi anziché utilizzare uno snapshot interno del database. Ciò include un blocco esclusivo (X) a breve termine sul database. TABLOCK causerà l’esecuzione più rapida di DBCC CHECKDB su un database con carico elevato, ma riduce la concorrenza disponibile nel database durante l’esecuzione di DBCC CHECKDB.
  • DATA_PURITY – Fa sì che DBCC CHECKDB controlli nel database la presenza di valori di colonna non validi o fuori intervallo. Dbcc CHECKDB, ad esempio, rileva colonne con valori di data e ora maggiori o inferiori all’intervallo accettabile per il tipo di dati datetime o colonne di tipo dati decimali o approssimative con valori di scala o precisione non validi.

Come ripristinare un database SQL Server

Dopo aver verificato la presenza di errori e non si dispone di un backup, potrebbe essere necessario utilizzare DBCC CHECKDB con un’opzione di riparazione.

Ecco le opzioni di riparazione disponibili per l’uso:

  • REPAIR_ALLOW_DATA_LOSS – Tenta di riparare tutti gli errori segnalati. Queste riparazioni possono causare una certa perdita di dati.
  • REPAIR_REBUILD – Esegue riparazioni che non hanno alcuna possibilità di perdita di dati. Ciò può includere riparazioni rapide, ad esempio la riparazione di righe mancanti in indici non cluster e riparazioni che richiedono più tempo, ad esempio la ricostruzione di un indice.

Come ho detto sopra, è molto importante avere backup aggiornati senza errori.

Ecco i comandi da lanciare con REPAIR_ALLOW_DATA_LOSS

DBCC CHECKDB ('NomeDB', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS; 
GO

se viene indicato di utilizzare REPAIR_REBUILD:

ALTER DATABASE Nomedb SET SINGLE_USER
GO

DBCC CHECKDB ('Nomedb ', REPAIR_FAST)
GO

DBCC CHECKDB ('Nomedb ', REPAIR_REBUILD)
GO

DBCC CHECKCONSTRAINTS
GO

Passaggio 5: Impostare di nuovo il database in modalità MULTI_USER

Dopo aver eseguito correttamente il ripristino del database, impostare il database MULTI_USER modalità corrente eseguendo il comando seguente:

ALTER DATABASE NomeDB SET MULTI_USER

Schedulare DBCC CHECKDB in SQL Server

Ovviamente, se non si desidera verificare lo stato del database oppure nel caso di più DB lanciare il comando N volte è possibile creare un piano di manutenzione che esegue il comando in base ad una pianificazione.

Piani di manutenzione in Sql Server

I piani di manutenzione fanno parte di SQL Server pronto all’uso (a meno che non si stia eseguendo Express Edition).

Tramite la Creazione guidata piano di manutenzione è possibile creare un piano di manutenzione che potrà essere regolarmente eseguito in Microsoft SQL Server Agent. In questo modo è possibile eseguire a intervalli specificati varie attività di amministrazione di database, tra cui backup, controlli di integrità del database o aggiornamenti delle statistiche del database.

Usare la finestra di dialogo Attività Controlla integrità database per controllare l’allocazione e l’integrità strutturale delle tabelle utente e di sistema e degli indici del database.

Piano di manutenzione -DBCC CHECKDB in Sql Server
Piano di manutenzione -DBCC CHECKDB in Sql Server

Messaggi di errore frequenti – DBCC CHECKDB in Sql Server

Al termine dell’esecuzione del comando CHECKDB, viene scritto un messaggio nel registro errori SQL. In caso di esito positivo, genera un messaggio che indica l’esito positivo e il tempo totale per il quale il comando è stato eseguito. In caso di errore, il processo viene terminato a causa del verificarsi di qualche errore, come indicato da un messaggio. I vari valori di stato che rappresentano il messaggio di errore sono:

Messaggi errori DBCC CHECKDB in Sql Server
Messaggi errori DBCC CHECKDB in Sql Server

Conclusione

Abbiamo visto come eseguire il comando DBCC CHECKDB in Sql Server per verificare lo stato del database ed i comandi la lanciare per cercare di riparare un database corrotto.

Per evitare problematiche inerenti configurare un piano di manutenzione completo.

Autore Bartolomeo

Consulente tecnico con la passione per il web e la tecnologia e tutto quello che le ronza intorno.
Nel tempo libero scrivo articoli per il mio blog su argomenti vari, in particolare su configurazione Windows, Linux e WordPress.

Condividi questo articolo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ho letto la policy privacy e accetto il trattamento dei miei dati personali in conformità al D.Lgs. 196/2003