SQLShack

Il controllo di integrità del database SQL è uno dei compiti più importanti e importanti dell’amministratore del database. L’attività integrità del database controlla l’integrità strutturale e l’allocazione di tutti gli oggetti e gli indici del database. I controlli di integrità possono essere eseguiti utilizzando il comando DBCC CheckDB. Il comando CheckDB viene utilizzato per identificare la corruzione nel database. Il comando esegue le seguenti operazioni sul database.

  1. Esegue DBCC CHECKTABLE su ogni tabella e view
  2. Esegue DBCC CHECKCATALOG sui database
  3. Esegue DBCC CHECKALLOC sui database
  4. Convalida i dati del service broker
  5. Convalida il contenuto delle visualizzazioni indicizzate

È possibile leggere DBCC CHECKDB (Transact-SQL) per saperne di più sul comando DBCC CheckDB.

Di solito, i DBA creano script personalizzati per identificare la corruzione nei database. Ma, se si sta lavorando su più database, diventa noioso rivedere i log generati dal comando DBCC CheckDB. Quindi ho creato una stored procedure SQL che viene eseguita su tutti i database e, se rileva errori di coerenza, invia i dettagli al team DBA.

Nel mio precedente articolo, Automatizzare i backup del database SQL utilizzando Windows Task Scheduler, avevo spiegato come potremmo automatizzare il processo per generare un backup completo e differenziale del database SQL ripristinato in SQL server express edition. Questo articolo spiega come possiamo automatizzare il controllo di coerenza del database SQL creato in SQL Server express edition. Per dimostrare, ho scaricato un database di esempio da qui. Ho installato SQL Server Express edition e ripristinato il database utilizzando il comando riportato di seguito:

1
2
3
4
5
6
7

UTILIZZARE
VAI
RIPRISTINARE il DATABASE DAL DISCO = N’C:\SQL Backup\DemoCorruptMetadata2008R2.bak ‘
CON FILE = 1,
SPOSTA N’Democorruptmetadata’ SU N’C:\Program File \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata.mdf’,
SPOSTA N’Democorruptmetadata_log’SU N’ C:\Program File \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, STATISTICHE = 5

Una volta ripristinato un database, eseguiamo il comando DBCC CheckDB per visualizzare gli errori.

1
2
3
4
5

set nocount on
VAI
master
VAI
dbcc checkdb (DemoCorruptMetadata) con all_errormsgs, no_infomsgs

errore di Coerenza del database SQL

Come si può vedere nell’immagine sopra, il database è danneggiato e il controllo di coerenza comando ha segnalato errori. Per eseguire il controllo di coerenza, ho creato una stored procedure che

  1. Eseguire il controllo di coerenza su tutti i database SQL, e se rileva eventuali errori di coerenza, inserisce gli errori in una tabella temporanea
  2. Estrarre il messaggio dalla tabella temporanea e inviare l’e-mail in formato HTML per il team di DBA

Il codice della stored procedure è mostrato di seguito:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

USE master
GO
CREATE PROCEDURE Sp_db_integrity_check
AS
BEGIN
DECLARE @DBName VARCHAR(150)
DECLARE @dbcccommand NVARCHAR(max)
DECLARE @DBcount INT
DECLARE @i INT = 0
CREATE TABLE #errormsgs
(
error INT NULL,
level INT NULL,
state INT NULL,
messagetext VARCHAR (7000) NULL,
repairlevel INT NULL,
status INT NULL,
dbid INT NULL,
dbfragid INT NULL,
objectid INT NULL,
indexid INT NULL,
partitionid INT NULL,
allocunitid INT NULL,
riddbid INT NULL,
ridpruid INT NULL,
INT NULL,
page INT NULL,
slot INT NULL,
refdbid INT NULL,
refpruid INT NULL,
reffile INT NULL,
refpage INT NULL,
refslot INT NULL,
allocation INT NULL,
)
CREATE TABLE #userdatabases
(
NOME VARCHAR(500)
)
INSERISCI IN #userdatabases
SELEZIONA NOME
DA sys.dati
DOVE database_id > 4
SET @DBcount=(SELECT Count(1)
DA #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @DBName = (SELECT TOP 1 NOME
DA #userdatabases)
SET @dbcccommand=’dbcc checkdb (‘ + @DBName
+ ‘) con no_infomsgs, all_errormsgs,tableresults’
INSERT INTO #errormsgs
EXEC (‘dbcc checkdb (‘ +@DBName +
‘) con no_infomsgs, all_errormsgs,tableresults’)
ELIMINA DAL #userdatabases
WHERE NOME = @DBName
SET @i=@i + 1
FINE
DROP TABLE #userdatabases
FINE
–selezionare Testomessaggio da #errormsgs
DECLARE @oggetto di tipo NVARCHAR(max)
DECLARE @tableHTML di tipo NVARCHAR(max)
SET @subject = ‘Database Costanza report di Controllo per il Server :’
+ @@servername
SET @tableHTML =
‘ <html> <Corpo> <style type=”text/css”> table {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; font-weight: bold; font-family: verdana; text-align: left; } </stile> <H3>Estivo di Database Costanza di Controllo sul Server ‘
+ @@servername + ‘</H3>’ + N'<table border=”1″>’
+ N'<tr><th>Testomessaggio</th><th>Database Danneggiato</th></tr>’
+ Cast((SELECT Isnull(testomessaggio, “) COME ‘TD’, “, Isnull(
Db_name(dbid), “) COME ‘TD’, “, Isnull(repairlevel, “) COME ” TD “
, ” DA #errormsgs PER xml path ( ‘tr’ ), radice) COME NVARCHAR(
max))
+ N'</

</html> < / Corpo>’

EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@destinatari = ‘ni*********[email protected]’,
@soggetto = @soggetti,
@importanza = ‘Alta’,
@body = @tableHTML,
@body_format = ‘HTML’;

Come sapete, SQL Server Express edition non supporta i database di posta elettronica, ma è possibile configurare la posta elettronica database tramite query T-SQL. È possibile leggere questo articolo, la configurazione della posta del database in SQL Server Express edition per comprendere il processo in dettaglio.

SQL Server Express edition non supporta gli agenti SQL Server, quindi; usiamo l’utilità di pianificazione di Windows. Windows schedular può eseguire il file batch, quindi ho creato un file batch che esegue una stored procedure utilizzando il comando SQLCMD. Il codice del file batch è il seguente.

1
sqlcmd -S Nisarg-PC\SQLExpress -Q “esegui sp_DB_Integrity_check” -d DBATools

Specificare il comando nella finestra di editor di testo e salvare il file come *.file bat. Ora, creiamo un’attività utilizzando l’utilità di pianificazione di Windows. Apri Pannello di controllo Apri Strumenti di amministratore Apri Utilità di pianificazione. Nell’utilità di pianificazione, fare clic su Crea un’attività di base. Nella prima schermata, specificare il nome dell’attività e la descrizione.

 Crea schermata attività di base

Crea schermata attività di base

Il controllo di coerenza del database deve essere eseguito ogni settimana, quindi specificare settimanalmente nella schermata Trigger attività.

 Schermata di attivazione attività

Task trigger screen

Lo script deve essere eseguito ogni domenica alle 1:00 AM, quindi specificare 01:00:00 nella casella di testo Start. Il lavoro dovrebbe essere eseguito una volta ogni settimana, quindi specificare 1 in Recur ogni casella di testo. Seleziona Domenica dall’elenco dei giorni.

Schermata di configurazione programma settimanale

Schermata di configurazione del programma settimanale

Stiamo eseguendo uno script batch per verificare la corruzione del database, quindi scegli l’opzione Avvia un programma nella schermata Azione.

 Schermata Azione attività

Schermata Azione attività

All’inizio, una schermata del programma, specificare il percorso completo del file batch. È possibile trovare il file sfogliando le directory. Nel nostro caso, il file batch è stato creato in C:\ DatabaseScripts, quindi ho fornito il percorso completo del file batch. Assicurarsi che l’utente che ha creato la pianificazione abbia accesso in lettura e scrittura nella directory in cui è stato creato il file batch. Fare clic su Avanti.

Avvia una schermata del programma

Avviare una schermata del programma

Nella schermata di riepilogo, è possibile rivedere i dettagli dell’attività creata. Clicca su Fine.

 Schermata di riepilogo

Schermata riepilogo

È possibile visualizzare l’attività in finestre di pianificazione attività. Ora, cerchiamo di testare l’attività configurata. Per fare ciò, fare clic con il pulsante destro del mouse su Verifica integrità del database e fare clic su Esegui. In alternativa, fare clic sul collegamento denominato Esegui dalla destra-pan.

Visualizza cronologia attività

Inizia il processo di controllo della coerenza.

Inizia il processo DBCC CheckDB

Il processo è stato completato con successo. È possibile verificare i dettagli dalla scheda Cronologia attività dell’utilità di pianificazione.

Cronologia esecuzione attività

Abbiamo ripristinato un database SQL danneggiato, quindi abbiamo ricevuto un’e-mail con gli errori di coerenza del database. L’e-mail appare come la seguente immagine.

Email errore di coerenza

Riepilogo

Questo articolo spiega come identificare la corruzione del database utilizzando uno script batch che è stato pianificato nell’utilità di pianificazione di Windows. Questo articolo può essere utile per gli amministratori di database entry-level che desiderano automatizzare le attività di manutenzione del database del database SQL creato o ripristinato in SQL server express edition. Nel mio prossimo articolo, impareremo come possiamo automatizzare la manutenzione dell’indice del database SQL creato in SQL Server express edition utilizzando l’utilità di pianificazione di Windows. Restate sintonizzati!

  • Autore
  • Post Recenti
Nisarg Upadhyay
Nisarg Upadhyay è un Database di SQL Server Administrator e Microsoft certified professional che ha più di 8 anni di esperienza con l’amministrazione di SQL Server e 2 anni con Oracle 10g di amministrazione del database.
Ha esperienza nella progettazione di database, ottimizzazione delle prestazioni, backup e ripristino, configurazione HA e DR, migrazioni di database e aggiornamenti. Ha completato il B. Tech dalla Ganpat University. Può essere raggiunto su nisargupadhyay87 @ outlook.com

Nisarg Upadhyay
Ultimi messaggi di Nisarg Upadhyay (vedi tutti)
  • Come spostare le tabelle di un altro filegroup di un database SQL – 14 dicembre, 2021
  • Configurare il Driver ODBC per Oracle 19c – dicembre 9, 2021
  • Configurare un Server Collegato tra SQL Server e PostgreSQL tramite driver ODBC – dicembre 6, 2021

Write a Comment

Il tuo indirizzo email non sarà pubblicato.