verificarea integrității bazei de date SQL este una dintre cele mai importante și importante sarcini ale administratorului bazei de date. Sarcina de integritate a bazei de date verifică integritatea structurală și alocarea tuturor obiectelor și indexurilor bazei de date. Verificările de integritate pot fi efectuate utilizând comanda DBCC CheckDB. Comanda CheckDB este utilizată pentru a identifica corupția din Baza de date. Comanda efectuează următoarele operații în baza de date.
- execută DBCC CHECKTABLE pe fiecare tabel și vizualizare
- execută DBCC CHECKCATALOG pe bazele de date
- execută DBCC CHECKALLOC pe bazele de date
- validează datele brokerului de servicii
- validează conținutul vizualizărilor indexate
puteți citi DBCC CHECKDB (Transact-SQL) pentru a afla mai multe despre comanda DBCC CHECKDB.
de obicei, DBA-urile creează scripturi personalizate pentru a identifica corupția din bazele de date. Dar, dacă lucrați la mai multe baze de date, devine obositor să revizuiți jurnalele generate de comanda DBCC CheckDB. Așa că am creat o procedură SQL stocată care se execută în toate bazele de date și, dacă găsește erori de consistență, trimite detaliile echipei DBA.
în articolul meu anterior, Automatizați backup-urile bazei de date SQL folosind Windows Task Scheduler, am explicat cum am putea automatiza procesul pentru a genera o copie de rezervă completă și diferențială a bazei de date SQL restaurată în SQL Server express edition. Acest articol explică modul în care putem automatiza verificarea coerenței bazei de date SQL create în SQL Server express edition. Pentru a demonstra, am descărcat o bază de date eșantion de aici. Am instalat SQL Server Express edition și restaurat baza de date folosind următoarea comandă:
1
2
3
4
5
6
7
|
utilizați
GO
restaurați baza de date de pe DISK = N ‘ C:\SQL Backup\DemoCorruptMetadata2008R2.bak ‘
cu fișier = 1,
muta N ‘Corruptmetadata’la N’ C:\Program fișiere\Microsoft SQL Server \ MSSQL11.SQLEXPRESS\MSSQL\date \ DemoCorruptMetadata.mdf’,
mutare N ‘Corruptmetadata_log’la N’ C:\Program fișiere\Microsoft SQL Server \ MSSQL11.SQLEXPRESS\MSSQL\date \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, statistici = 5
|
odată ce o bază de date este restaurată, să executăm comanda DBCC CheckDB pentru a vizualiza Erorile.
1
2
3
4
5
|
setați nocount pe
GO
utilizați master
GO
DBCC checkdb (DemoCorruptMetadata) cu all_errormsgs, no_infomsgs
|
după cum puteți vedea în imaginea de mai sus, baza de date este coruptă, iar comanda de verificare a consistenței a raportat erori. Pentru a efectua verificarea consistenței, am creat o procedură stocată care
- rulați verificarea consistenței pe toate bazele de date SQL și, dacă găsește erori de consistență, introduce acele erori într-un tabel temp
- extrageți mesajul din tabelul temp și trimiteți e-mailul formatat HTML echipei DBA
codul procedurii stocate este prezentat mai jos:
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
(
nume VARCHAR(500)
)
introduceți în # userdatabases
selectați Nume
din sys.baze de date
unde database_id > 4
setați @DBcount=(selectați numărul(1)
din #userdatabases)
în timp ce ( @dbcount > @i )
începeți
setați @DBName = (selectați TOP 1 nume
din #userdatabases)
setați @DBCCCOMMAND=’DBCC CHECKDB (‘ + @dbname
+ ‘) cu no_infomsgs, all_errormsgs,Tableresults’
introduceți în #errormsgs
Exec (‘DBCC CHECKDB (‘ +@dbname +
‘) cu no_infomsgs, all_errormsgs,TABLERESULTS’)
ștergeți din #userdatabases
unde nume = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
–selectați MessageText din #errormsgs
declarați @subiect NVARCHAR(max)
declarați @tableHTML nvarchar(max)
set @subiect = ‘raport de verificare a consistenței bazei de date pentru server :’
+ @@servername
SET @ tableHTML =
‘ <html> <corp > < 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-greutate: bold; font-familie: verdana; text-aliniere: stânga; } < / stil > < H3 >verificarea consistenței bazei de date pe Server ‘
+ @@servername + ‘ </H3>’ + N ‘ <bordură tabel=”1″>’
+ N ‘ < tr ><th>text de mesaj</th>< th > bază de date coruptă < / th> < /tr>’
+ Cast((SELECT Isnull(messagetext, „) AS „TD”,”, Isnull(
Db_name(dbid),”) AS „TD”,”, Isnull(repairlevel,”) AS ” TD „
, ” FROM #errormsgs FOR XML path („tr”), root) AS NVARCHAR(
max))
+ n ‘</tabel> </HTML> < / corp>’
EXEC msdb..Sp_send_dbmail
@ profile_name = ‘DBMailProfile’,
@destinatari = ‘ni*********[email protected]’,
@subject = @ subject,
@ importance = ‘High’,
@body = @tableHTML,
@body_format = ‘HTML’;
|
după cum știți, SQL Server Express edition nu acceptă e-mailul bazei de date, dar puteți configura e-mailul bazei de date utilizând interogări T-SQL. Puteți citi acest articol, configurarea bazei de date Mail în SQL Server Express edition pentru a înțelege procesul în detaliu.
SQL Server Express edition nu acceptă agenți SQL Server, deci; folosim schedularul de activități Windows. Windows schedular poate executa fișierul batch, așa că am creat un fișier batch care execută o procedură stocată folosind comanda sqlcmd. Codul fișierului batch este următorul.
1
|
sqlcmd-s Nisarg-PC\SQLEXPRESS-Q „executa sp_DB_Integrity_check” – d DBATools
|
specificați comanda în editorul de text și salvați fișierul ca *.fișier liliac. Acum, să ne creați o sarcină folosind Windows task schedular. Deschideți Panoul de Control deschideți instrumentele de Administrator deschideți Planificatorul de sarcini. În schedularul de activități, faceți clic pe Creați o sarcină de bază. În primul ecran, specificați numele sarcinii și descrierea.
verificarea consistenței bazei de date trebuie efectuată în fiecare săptămână, deci specificați săptămânal în ecranul declanșatoare de activități.
scriptul trebuie executat în fiecare duminică la ora 1:00, deci specificați 01:00:00 în caseta de text Start. Lucrarea ar trebui să fie executată o dată în fiecare săptămână, astfel încât să specificați 1 în fiecare casetă de text. Selectați duminica din lista zilelor.
rulăm un script batch pentru a verifica corupția bazei de date, deci alegeți opțiunea Start a program pe ecranul de acțiune.
la început, un ecran de Program, specificați calea completă a fișierului batch. Puteți găsi fișierul navigând prin directoare. În cazul nostru, fișierul batch a fost creat în C:\ DatabaseScripts, așa că am furnizat calea completă a fișierului batch. Asigurați-vă că utilizatorul care a creat programul trebuie să aibă acces citire-scriere în directorul în care a fost creat fișierul batch. Faceți clic pe Următorul.
în ecranul Rezumat, puteți examina detaliile activității create. Faceți clic pe Finish.
puteți vizualiza activitatea în Windows schedular task. Acum, să testăm sarcina configurată. Pentru a face acest lucru, faceți clic dreapta pe verificați integritatea bazei de date și faceți clic pe Executare. Alternativ, faceți clic pe link-ul numit Run din dreapta-pan.
începe procesul de verificare a consistenței.
procesul a fost finalizat cu succes. Puteți verifica detaliile din fila Istoric activități din schedularul activități.
am restaurat o bază de date SQL coruptă, așa că am primit un e-mail cu erorile de consistență a bazei de date. E-mailul arată ca următoarea imagine.
rezumat
acest articol a explicat cum putem identifica corupția bazei de date folosind un script batch care a fost programat în programul de activități Windows. Acest articol poate fi util pentru administratorii bazei de date entry-level care doresc să automatizeze activitățile de întreținere a bazei de date SQL baze de date create sau restaurate în SQL Server express edition. În următorul meu articol, vom afla cum putem automatiza întreținerea indexului bazei de date SQL creată în SQL Server express edition folosind Windows Task scheduler. Stay tuned!
- autor
- Postări recente
are expertiză în proiectarea bazelor de date, tuning de performanță, backup și recuperare, configurare HA și DR, migrări și upgrade-uri de baze de date. A absolvit B. Tech de la Universitatea Ganpat. El poate fi contactat pe [email protected]
- cum să mutați tabelele într-un alt grup de fișiere dintr-o bază de date SQL-14 decembrie 2021
- configurați driverele ODBC pentru Oracle 19c-9 decembrie 2021
- configurați un Server legat între SQL Server și PostgreSQL folosind driverele ODBC-decembrie 6, 2021