Database
 sql >> Database >  >> RDS >> Database

Panoramica della funzione DBCC CheckDB

Introduzione

La regolare manutenzione del database è una parte importante del lavoro di un amministratore di database che aiuta a garantire che i sistemi di importanza critica funzionino normalmente. Uno dei modi più semplici per farlo sarà automatizzare le attività relative a DBCC CheckDB. Indipendentemente dalla versione di SQL Server in esecuzione, non ci sarà mai un database che non richiede manutenzione. Dovrai pianificare la manutenzione in modo che avvenga regolarmente in modo da poterti coprire le spalle soprattutto nel momento di un vero scenario di disastro.

DBA è sempre il colpevole

Ogni volta che c'è un problema con il database, tutti gli occhi sono puntati sul DBA. Indipendentemente dal fatto che il problema sia stato causato dalla pioggia o da qualche sviluppatore che ha scritto codice sgradevole con conseguente lentezza del database, ci si aspetta sempre che il DBA risolva il pasticcio. E puoi immaginare il tipo di pressione che devi affrontare se ti viene chiesto di ripristinare rapidamente un database utilizzando l'ultimo backup disponibile che, come scoprirai nel processo, non è valido e l'integrità del database era già compromessa da pochi mesi fa. Qui sta la differenza tra un DBA proattivo e un DBA reattivo. In realtà, la tua strategia di ripristino è molto più critica rispetto alla strategia di backup. A che scopo possono servire i backup giornalieri del database se non sono utili al momento del ripristino?

Perché la manutenzione è importante?

Con la crescita senza precedenti delle tecnologie di database e con le nuove funzionalità che compaiono ad ogni versione, è imperativo per te come DBA stare al passo con gli altri e assicurarti di seguire le migliori pratiche del settore in manutenzione del database.

DBCC CheckDB e come eseguirlo

DBCC CheckDB:questo nome è abbastanza descrittivo della funzionalità. In parole povere, controlla i database. Questo è importante per garantire che il database funzioni come previsto. Fondamentalmente, DBCC CheckDB controlla l'integrità logica e fisica di tutti gli oggetti nel database. Questo è ciò che DBCC CheckDB fa sotto il cofano secondo il ufficiale Documentazione Microsoft:

  • Esegue DBCC CHECKALLOC sul database:la coerenza delle allocazioni di spazio su disco

  • Esegue DBCC CHECKTABLE su ogni tabella e vista nel database, ovvero l'integrità di tutte le pagine e le strutture che compongono la tabella o la vista indicizzata.

  • Esegue DBCC CHECKCATALOG sul database:verifica la coerenza del catalogo all'interno del database specificato.

  • Convalida il contenuto di ogni vista indicizzata nel database.

  • Convalida la coerenza a livello di collegamento tra i metadati della tabella e le directory/file del file system durante la memorizzazione di dati varbinary(max) nel file system utilizzando FILESTREAM.

  • Convalida i dati di Service Broker nel database.

Quando esegui il comando DBCC CheckDB in modo esplicito o tramite un processo, sostanzialmente esegue tutto quanto sopra.

Esecuzione di DBCC CheckDB direttamente su un database

Puoi eseguire il comando DBCC CheckDB direttamente su un database e controllare i risultati. Controlla l'output del comando come mostrato nello screenshot qui sotto. L'output mostra i dettagli sulle righe nelle tabelle e il numero di pagine utilizzate da queste righe.

Se guardi da vicino, vedrai maggiori dettagli specifici per gli oggetti del database. Ad esempio, nel database "VLDB", posso vedere il seguente output:

“Object ID 1179151246 (object 'Warehouse.ColdRoomTemperatures'): The operation is not supported with memory optimized tables. This object has been skipped and will not be processed.”

Come mostra questo output, DBCC CheckDB non è supportato con le tabelle con ottimizzazione per la memoria. Le tabelle con ottimizzazione per la memoria sono state introdotte per la prima volta in SQL Server 2014 come funzionalità solo aziendale. Tuttavia, nel corso degli anni sono diventate una funzionalità popolare e diffusa in SQL Server.

Noterai inoltre che DBCC Check ha convalidato i dati del broker di servizi nel database come mostrato di seguito.

“DBCC results for 'VLDB'.

Service Broker Msg 9675, State 1: Message Types analyzed: 14.

Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.

Service Broker Msg 9667, State 1: Services analyzed: 3.

Service Broker Msg 9668, State 1: Service Queues analyzed: 3.

Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.

Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.

Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.

Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.”

Infine, una volta completato con successo il comando DBCC CheckDB, vedrai il seguente output:

Cosa succede se vengono segnalati errori dopo l'esecuzione di DBCC CheckDB?

Nell'esempio precedente, potresti vedere che DBCC CheckDB è stato completato senza errori. Tuttavia, se non sei così fortunato, potresti imbatterti in errori di coerenza e quello sarà il momento in cui dovrai prendere alcune decisioni critiche. Se hai riscontrato problemi su un database di produzione, è meglio informare i proprietari dell'azienda o il tuo Operations Manager di mettere le carte in tavola. Puoi dare loro la possibilità di ripristinare il database dall'ultimo backup disponibile oppure puoi provare a eseguire comandi DBCC CheckDB con opzioni aggiuntive.

I messaggi di errore DBCC potrebbero essere simili a quelli seguenti:

Table error: Object ID 36, index ID 1, partition ID, alloc unit ID (type In-row data).

Keys out of order on page (1:107), slots 6 and 9.
CHECKDB found 0 allocation errors and 1 consistency errors in table 'sys.syk' (object ID 36).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'VLDB'.
repair_rebuild is the minimum repair level for the errors found by DBCC CHECKDB (VLDB).

Nel messaggio di errore, puoi vedere un messaggio di errore accuratamente formulato:"repair_rebuild is the minimo livello di riparazione per gli errori rilevati da DBCC CHECKDB ” – suggerendo di eseguire DBCC CheckDB con l'opzione repair_rebuild. Basta guardare la parola evidenziata:"minimo". Ciò significa che, con l'opzione repair_rebuild, non vi è alcuna reale possibilità di perdita di dati e SQL Server esegue alcune soluzioni rapide sotto il cofano. Fare riferimento al comando seguente per eseguire DBCC CheckDB con l'opzione repair_rebuild. Assicurati di posizionare il database in modalità utente singolo.

Come da documentazione Microsoft, l'opzione REPAIR_REBUILD è la versione più innocua in quanto non può esserci perdita di dati. Tuttavia, se REPAIR_REBUILD non risolve ancora gli errori di coerenza, è disponibile un'altra opzione:abilitare REPAIR_ALLOW_DATA_LOSS. Guardando il nome, sappiamo che ci sarebbe la possibilità di una perdita di dati se attiviamo questa opzione. Per questo motivo, Microsoft ci avverte di utilizzarlo con estrema cautela poiché potrebbero verificarsi conseguenze impreviste sull'esecuzione di DBCC CheckDB con REPAIR_ALLOW_DATA_LOSS. Il comando DBCC CheckDB in questo caso avrà il seguente aspetto:

Punti da considerare prima di utilizzare l'opzione Ripara con DBCC CheckDB

  • Quanto è critico il database in questione?

  • Il database è in produzione o in un ambiente di test?

  • Quanto è grande il database?

  • Hai una buona strategia di ripristino in caso di problemi?

  • Hai convalidato i backup del database?

In base alla situazione e alle risposte alle domande di cui sopra, prova a prendere una decisione tenendo presente i migliori interessi del cliente.

Automatizzazione delle attività DBCC CheckDB su SQL Server utilizzando i piani di manutenzione del database

Beh, non devi eseguire tutti questi comandi manualmente sui tuoi server. Ecco perché abbiamo piani di manutenzione in atto. Assicurati di pianificare un ciclo di manutenzione regolare per tutti i tuoi database utilizzando i piani di manutenzione del database. È un compito piuttosto semplice e diretto. In "Attività del piano di manutenzione", seleziona "Attività di verifica dell'integrità del database".

Questo aggiungerà una sottoattività al tuo piano di manutenzione per programmare i controlli di integrità per i tuoi database. Assicurati di selezionare i database richiesti come mostrato.

Assicurati di eseguire tutti i controlli del database durante un'ora non di punta della settimana. Di solito, le finestre di manutenzione sono nei fine settimana quando il server è meno occupato rispetto agli altri giorni della settimana. Tuttavia, questo varia da server a server e dipende dall'applicazione. Sui sistemi di database critici, gli avvisi vengono generalmente visualizzati ogni volta che si verificano controlli DBCC CheckDB o integrità mancati. In questo modo, i DBA possono controllare in modo proattivo e assicurarsi di completare i controlli di integrità per evitare sorprese in seguito.

Automatizzazione delle attività DBCC CheckDB su SQL Server utilizzando script personalizzati o altri script popolari

I piani di manutenzione di SQL Server non devono essere sempre utilizzati per eseguire attività di manutenzione sull'istanza di SQL Server. Sono disponibili altri script personalizzati che puoi utilizzare. Uno dei popolari strumenti di manutenzione gratuiti è la soluzione di manutenzione di Ola Hallengren. È possibile installare l'intera soluzione di manutenzione che include attività di backup, ottimizzazione, ecc., oppure scaricare solo gli script pertinenti relativi ai controlli di integrità. In questa demo cercheremo di installare gli script specifici per i controlli di integrità del database.

Fare clic sull'opzione DatabaseIntegrityCheck.sql come mostrato per scaricare le procedure memorizzate che controllano l'integrità del database. Dopo aver eseguito queste stored procedure sul database principale, mi sono imbattuto in questi messaggi di avviso:

“The module 'DatabaseIntegrityCheck' depends on the missing object 'dbo.CommandExecute'. The module will still be created; however, it cannot run successfully until the object exists.”

Se esegui la procedura memorizzata per eseguire i controlli di integrità, otterrai il seguente errore:

Come indica l'errore, puoi scaricare il codice mancante qui. Fatto ciò, puoi iniziare a provare i controlli di integrità del database.

Puoi regolare varie opzioni usando i parametri di comando DBCC aggiuntivi. Puoi trovare maggiori dettagli ed esempi di questi qui.

Tuttavia, in questa demo, esamineremo alcuni esempi per vedere quanto siano davvero facili e intuitivi questi script.

Per l'esecuzione di DBCC CheckDB su tutti i database utente , dovrai eseguire quanto segue:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'USER_DATABASES',

@CheckCommands = 'CHECKDB'

Puoi vedere il comando che è stato eseguito e lo stato del risultato che conferma che DBCC CheckDB è stato completato correttamente.

Per eseguire Controllo DBCC solo per i database di sistema, esegui questo comando:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'SYSTEM_DATABASES',

@CheckCommands = 'CHECKDB'

Nello screenshot, puoi vedere che il DBCC CheckDB è stato completato correttamente per i database di sistema.

Per eseguire DBCC CheckDB solo per un database specifico, eseguire quanto segue:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'VLDB', -- your specific DB Name

@CheckCommands = 'CHECKDB'

Nell'esempio sopra, hai visto alcuni modi in cui possiamo usare i parametri. Tuttavia, ci sono una serie di altri filtri che puoi selezionare in base alle tue preferenze. Inoltre, come già accennato, puoi fare riferimento a questo link per una maggiore comprensione delle sceneggiature di Ola Hallengren. Tanto per ribadire, sto utilizzando gli script di Ola Hallengren sui server che gestisco ed è altamente raccomandato e riconosciuto all'interno della community di SQL Server. È possibile pianificare le stored procedure in base ai parametri preferiti ed eseguirlo come un processo SQL durante le ore non di punta. In questo modo, non è necessario eseguire manualmente nessuno di questi script, così puoi concentrarti su altre attività importanti.

Conclusione

  • Da questo articolo, hai imparato a conoscere DBCC CheckDB e come può essere utilizzato
  • Hai anche compreso l'importanza di eseguire regolarmente DBCC CheckDB su tutti i tuoi database importanti
  • Hai anche appreso l'importanza di avere una strategia di backup testata:si consiglia di ripristinare i database utilizzando un buon backup invece di risolvere eventuali errori di coerenza utilizzando le opzioni di riparazione DBCC
  • Hai anche visto quanto sia facile configurare e automatizzare gli script utilizzando piani di manutenzione di SQL Server o script personalizzati, ad esempio quello di Ola Hallengren
  • Hai anche appreso i rischi della mancata pianificazione di DBCC CheckDB sulla tua infrastruttura supportata
  • Hai anche appreso che, indipendentemente dal server su cui ti trovi o dall'infrastruttura in esecuzione, non può esistere database che non richieda manutenzione
  • Infine, assicurati di mantenere integri i tuoi database e, in ogni caso, sii pronto per quei giorni OFF che potrebbero non essere sotto il tuo controllo