Come utilizzare il comando DBCC CHECKDB per la riparazione del database SQL?
Riassunto: Il comando Database Console Command (DBCC) CHECKDB viene utilizzato per identificare gli errori nel database di SQL Server. DBCC CHECKDB offre tre opzioni di riparazione per risolvere gli errori relativi al database. Questo articolo illustra come utilizzare il comando DBCC CHECKDB per riparare il database SQL. Inoltre, si parlerà di un software di riparazione MS SQL specializzato che è possibile utilizzare quando DBCC CHECKDB non riesce a riparare il database.
DBCC CHECKDB viene utilizzato per verificare l’integrità fisica e logica degli oggetti del database, le relazioni degli indici e altri controlli strutturali. Il fallimento di uno di questi controlli segnala gli errori di consistenza come parte del comando della console del database.
Il metodo migliore per riparare gli errori nel database, segnalati da DBCC CHECKDB, è quello di eseguire l’ultimo backup noto come consigliato da Microsoft. Tuttavia, se il backup non è disponibile o è danneggiato, si può provare ad accedere al database in stato di emergenza.
Lo stato di emergenza consente di accedere a un database contrassegnato come sospetto. Consente inoltre di eseguire le opzioni di riparazione DBCC CHECKDB per risolvere la corruzione del database. Una volta che il database diventa accessibile, ripararlo utilizzando l’opzione di riparazione di livello minimo.
Nota: le operazioni di riparazione escludono qualsiasi vincolo applicato a o tra le tabelle. Pertanto, se una tabella ha uno o più vincoli, è necessario eseguire DBCC CHECKCONSTRAINTS dopo un’operazione di riparazione.
Come utilizzare il comando DBCC CHECKDB?
Prima di utilizzare DBCC CHECKDB, esaminiamo la sua sintassi.
Sintassi:
DBCC CHECKDB [ ( db_name | db_id | 0 [ , NOINDEX | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] ) ] [ WITH { [ ALL_ERRORMSGS ] [ , EXTENDED_LOGICAL_CHECKS ] [ , NO_INFOMSGS ] [ , TABLOCK ] [ , ESTIMATEONLY ] [ , { PHYSICAL_ONLY | DATA_PURITY } ] [ , MAXDOP = number_of_processors ] } } ] ] |
Ci sono alcune opzioni che si possono usare per eseguire i controlli di coerenza del database usando DBCC CHECKDB. Le opzioni sono le seguenti:
- nome_database | ID_database | 0: Specifica il nome o l’ID del database rispetto al quale è necessario eseguire i controlli di integrità. Se ‘nome_database’ o ‘id’ non sono specificati e viene specificato ‘0’, per impostazione predefinita verrà utilizzato il database corrente.
- NOINDEX: questo argomento esegue solo controlli logici per ridurre il tempo di esecuzione totale. Inoltre, non include gli indici non raggruppati nei controlli.
- REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD: per riparare un database, è necessario eseguire il comando DBCC CHECKDB con una di queste opzioni di riparazione:
- REPAIR_ALLOW_DATA_LOSS: utilizzare questa opzione di riparazione come ultima risorsa per riparare un database SQL, poiché può comportare la perdita di dati.
- RIPARAZIONE_VELOCE: Questa opzione di riparazione non esegue alcuna azione di riparazione. Consente di mantenere la sintassi per la compatibilità all’indietro.
- REPAIR_REBUILD: L’opzione REPAIR_REBUILD aiuta a riparare il database senza alcuna perdita di dati. Può essere usata per riparare le righe mancanti negli indici non raggruppati e per ricostruire un indice.
- ALL_ERRORMSGS: Questo argomento visualizza tutti i messaggi di errore per ogni oggetto.
- EXTENDED_LOGICAL_CHECKS: a partire da SQL Server 2016, non vengono eseguiti controlli logici aggiuntivi su indici e viste filtrati. Per eseguire i controlli aggiuntivi, è necessario utilizzare l’opzione EXTENDED_LOGICAL_CHECKS.
- NO_INFOMSGS: L’output di DBCC visualizza messaggi informativi non correlati agli errori di consistenza. L’esecuzione di DBCC CHECKDB con NO_INFOMSGS può disattivare i messaggi informativi.
- TABLOCK: utilizza i lock anziché lo snapshot interno del database per eseguire i controlli di coerenza su un database.
- ESTIMATEONLY: Specifica lo spazio stimato richiesto dal database ‘tempdb’ per l’esecuzione del comando CHECKDB.
- PHYSICAL_ONLY: Limita i controlli di coerenza sulla struttura fisica della pagina del database, riducendo il tempo di esecuzione di DBCC CHECKDB su database di grandi dimensioni.
- DATA_PURITY: aiuta a verificare che un database non abbia valori di colonna non validi o fuori range.
Prerequisiti per l’esecuzione di DBCC CHECKDB
Prima di eseguire DBCC CHECKDB per eseguire controlli di coerenza su un database o ripararlo, è necessario assicurarsi che il sistema soddisfi i seguenti prerequisiti.
- SQL Server Management Studio (SSMS) deve essere installato sul computer.
- L’utente deve avere i privilegi di amministratore.
Passi per utilizzare DBCC CHECKDB per riparare il database SQL
Aprite SSMS e seguite questi passaggi per riparare il database SQL utilizzando DBCC CHECKDB:
Nota: nei passaggi indicati di seguito, utilizzeremo il nome del database come Dbtesting. Assicurarsi di sostituire DBtesting con il nome del database.
Passo 1: Impostare il database in modalità di emergenza
Cambiate lo stato del database in modalità EMERGENZA, che fornisce all’amministratore un accesso di sola lettura. Per mettere il database in modalità EMERGENZA, eseguite la seguente query in SSMS:
ALTER DATABASE [Dbtesting] SET EMERGENZA
Fase 2: Verifica degli errori di corruzione
Una volta che l’amministratore è in grado di accedere al database, eseguire il seguente comando DBCC CHECKDB per analizzare gli errori di corruzione nel database:
DBCC CHECKDB (Dbtesting)
Se DBCC CHECKDB rileva errori nel database, consiglia le opzioni di riparazione appropriate per risolvere il problema.
Passo 3: Impostare il database di SQL Server in modalità SINGLE_USER
Prima di utilizzare le opzioni di riparazione di DBCC CHECKDB, mettete il database corrotto in modalità SINGLE_USER per evitare che altri utenti modifichino i dati durante il processo di riparazione. Per impostare la modalità del database SQL su SINGLE_USER, seguite i seguenti metodi:
Metodo 1: Utilizzo dell’interfaccia grafica utente (GUI)
Aprite SSMS ed eseguite i seguenti passaggi per impostare il database in modalità SINGLE_USER:
- Fare clic con il pulsante destro del mouse sul database che si desidera riparare, quindi fare clic su Proprietà.
- Nella finestra Proprietà del database, fare clic su Opzioni.
- Fare clic sulla casella a discesa Limita accesso nella scheda Stato, selezionare l’opzione UTENTE SINGOLO e fare clic su OK.
Metodo 2: utilizzo di comandi Transact-SQL (T-SQL)
È anche possibile impostare il database in modalità SINGLE_USER, eseguendo la seguente query T-SQL in SSMS:
ALTER DATABASE Dbtesting SET SINGLE_USER
Passo 4: Riparazione del database
Dopo aver modificato la modalità del database in SINGLE_USER, eseguire DBCC CHECKDB con l’opzione di riparazione REPAIR_ALLOW_DATA_LOSS per riparare il database di SQL server.
DBCC CHECKDB (N ‘Dbtesting’, REPAIR_ALLOW_DATA_LOSS) CON ALL_ERRORMSGS, NO_INFOMSGS;
VAI REPAIR_ALLOW_DATA_LOSS
Nota: Sebbene l’opzione di riparazione REPAIR_ALLOW_DATA_LOSS aiuti a riparare tutti gli errori segnalati nel database di SQL server, non è l’opzione migliore per riparare la corruzione del database. Questa opzione di riparazione causa la perdita di dati. Infatti, Microsoft consiglia di utilizzare l’opzione REPAIR_ALLOW_DATA_LOSS come ultima risorsa quando non è possibile ripristinare un database dal backup. Se non si dispone di un backup e non si può rischiare di perdere i dati, utilizzare un software di riparazione MS SQL specializzato per riparare il database senza alcuna perdita di integrità.
Passo 5: Riportare il database alla modalità MULTI_USER
Dopo aver riparato il database, impostare il database in modalità MULTI_USER eseguendo il seguente comando:
ALTER DATABASE Dbtesting SET MULTI_USER
Cosa fare quando DBCC CHECKDB fallisce?
L’esecuzione del comando DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS potrebbe richiedere l’eliminazione di alcune pagine del database, con conseguente perdita di dati. Inoltre, i comandi DBCC CHECKDB potrebbero fallire e restituire un errore quando si tratta di file di database SQL gravemente danneggiati.
In tal caso, utilizzare un software di riparazione MS SQL specializzato, come Stellar Repair for MS SQL. Il software ripara i database MS SQL gravemente danneggiati e ne ripristina tutti i componenti, mantenendo l’integrità del database. Il software di recupero SQL aiuta a ripristinare l’accesso al database con un impegno manuale e di tempo minimo.
Caratteristiche principali:
- Ripara sia i file di database MDF che NDF
- Recupera tutti i componenti del database, comprese tabelle, chiavi, indici, stored procedure, ecc.
- Consente il recupero dei record cancellati
- Recupera tabelle SQL con compressione PAGE e ROW
- Supporta il recupero selettivo degli oggetti del database
- Anteprima degli oggetti del database recuperabili
Per conoscere il processo di funzionamento completo del software, guardate il video
Conclusione
Un database corrotto può causare inutili tempi di inattività e perdita di dati. Per superare gli errori relativi al database, ripristinare il database dal backup più recente. Se il backup corrente del database non esiste o se il backup stesso è corrotto, è possibile utilizzare l’opzione di riparazione DBCC CHECKDB ‘REPAIR_ALLOW_DATA_LOSS’ per riparare il database. Tuttavia, questa opzione di riparazione comporta il rischio di perdita di dati. Inoltre, DBCC CHECKDB potrebbe non risolvere il problema.
Utilizzate il software Stellar Repair for SQL per riparare il database MS SQL e recuperare tutti i suoi componenti con precisione, mantenendo la struttura del database e l’integrità degli oggetti del database.