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.
Sommario
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)
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.
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:
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.