databaseintegritetskontrollen er en af de mest afgørende og vigtige opgaver for databaseadministratoren. Opgaven databaseintegritet kontrollerer den strukturelle integritet og tildeling af alle databaseobjekter og indekser. Integritetskontrollerne kan udføres ved hjælp af kommandoen DBCC CheckDB. Kommandoen CheckDB bruges til at identificere korruptionen i databasen. Kommandoen udfører følgende operationer på databasen.
- udfører DBCC CHECKTABLE på hver tabel og visning
- udfører DBCC CHECKCATALOG på databaserne
- udfører DBCC CHECKALLOC på databaserne
- validerer servicemæglerdata
- validerer indholdet af indekserede visninger
du kan læse DBCC checkdb for at lære mere om kommandoen DBCC checkdb.
normalt opretter DBA ‘ er brugerdefinerede scripts for at identificere korruptionen i databaserne. Men hvis du arbejder på flere databaser, bliver det kedeligt at gennemgå logfilerne genereret af kommandoen DBCC CheckDB. Så jeg har oprettet en gemt procedure, der udføres på tværs af alle databaser, og hvis den finder nogen konsistensfejl, sender den detaljerne til DBA-teamet.
i min tidligere artikel havde jeg forklaret, hvordan vi kunne automatisere processen for at generere en fuld og differentiel sikkerhedskopi af databasen, der blev gendannet i serverudgaven. Denne artikel forklarer, hvordan vi kan automatisere overensstemmelseskontrollen af en database, der er oprettet i en serverudgave. For at demonstrere har jeg hentet en prøvedatabase herfra. Jeg har installeret
1
2
3
4
5
6
7
|
brug
gå
Gendan DATABASE fra DISK = N’C:\SQL Backup\DemoCorruptMetadata2008R2.bak ‘
med fil = 1,
Flyt N ‘Democorruptmetadata’til N’ C:\Program filer\Microsoft server\MSSKL11.Data \ DemoCorruptMetadata.mdf’,
Flyt N ‘Democorruptmetadata_log’til N’ C:\Program filer\Microsoft server\MSSKL11.Data \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, statistik = 5
|
når en database er gendannet, lad os køre kommandoen DBCC CheckDB for at se fejlene.
1
2
3
4
5
|
Indstil nocount på
GO
brug master
GO
dbcc checkdb (DemoCorruptMetadata) med all_errormsgs, no_infomsgs
|
som du kan se på ovenstående billede, er databasen beskadiget, og kommandoen konsistenskontrol har rapporteret fejl. For at udføre konsistenskontrollen har jeg oprettet en gemt procedure, der
- Kør konsistenskontrollen på alle databaser, og hvis den finder nogen konsistensfejl, indsætter den disse fejl i en temp-tabel
- Uddrag meddelelsen fra temp-tabellen og send den HTML-formaterede e-mail til DBA-teamet
koden for den lagrede procedure vises nedenfor:
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
(
navn VARCHAR(500)
)
indsæt i # userdatabases
Vælg navn
fra sys.databaser
hvor database_id > 4
SET @DBcount=(vælg Count(1)
FROM #userdatabases)
mens ( @DBcount > @i )
BEGIN
SET @DBName = (Vælg TOP 1 navn
FROM #userdatabases)
SET @DBCCCOMMAND=’DBCC checkdb (‘ + @dbname
+ ‘) med no_infomsgs, all_errormsgs,tableresults’
indsæt i #errormsgs
eksekver (‘DBCC CHECKDB (‘ +@dbname +
‘) med no_infomsgs, all_errormsgs,TABLERESULTS’)
Slet fra #userdatabases
hvor name = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
–vælg Messagetekst fra #errormsgs
erklære @emne NVARCHAR(maks)
erklære @tabelhtml nvarchar(maks.)
set @subject = ‘database consistancy check report for server :’
+ @@servernavn
SET @tableHTML =
‘ <html > <krop> < style type= “tekst/css” > tabel {skriftstørrelse:9.0 pt;skriftfamilie:verdana;tekstjustering:venstre;} tr {tekstjustering:venstre;} h3 { Skærm: blok; skriftstørrelse: 15.0 pt; font-vægt: fed; font-familie: verdana; tekst-Juster: venstre; } < / style> <H3>Sommerlig af Databasekonsistenscheck på Server ‘
+ @@servernavn + ‘< / H3> ‘+ N ‘ < tabelgrænse=”1″>’
+ N ‘ <tr><th>meddelelsestekst< / th><TH> korrupt Database< / th> < / tr>’
+ Cast((vælg Isnull(meddelelsestekst, “) som ‘TD’, “, Isnull(
Db_name(dbid), “) som ‘TD’, “, Isnull(repairlevel, “) som ‘TD’
, ” fra #errormsgs for STI ( ‘tr’ ), root) som NVARCHAR(
maks))
+ n'</tabel> </HTML> < / krop>’
direktør msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@recipients = ‘ni*********[email protected]’,
@emne = @emne,
@betydning = ‘høj’,
@body = @tableHTML,
@body_format = ‘HTML’;
|
som du ved, understøtter vi ikke databasemail, men du kan konfigurere databasemailen ved hjælp af T-forespørgsler. Du kan læse denne artikel, konfiguration af Databasepost i serverudgaven for at forstå processen i detaljer.
serverudgaven understøtter ikke serveragenter. Vinduer schedular kan udføre batchfilen, så jeg har oprettet en batchfil, der udfører en gemt procedure ved hjælp af kommandoen. Koden for batchfilen er følgende.
1
|
“udfør sp_DB_Integrity_check” – d DBATools
|
angiv kommandoen i teksteditoren, og gem filen som *.bat-fil. Lad os nu oprette en opgave ved hjælp af vinduer task schedular. Åbn Kontrolpanel Åbn Administratorværktøjer Åbn Opgaveplanlægger. Klik på Opret en grundlæggende opgave i opgaveskemaet. Angiv navnet på opgaven og beskrivelsen på det første skærmbillede.
databasekonsistenscheck skal udføres hver uge, så angiv ugentligt på skærmen Opgaveudløsere.
scriptet skal udføres hver søndag kl 1:00, så angiv 01:00:00 i starttekstfeltet. Jobbet skal udføres en gang hver uge, så angiv 1 i gentag hver tekstboks. Vælg søndag fra listen over dage.
vi kører et batchscript for at kontrollere databasekorruptionen, så vælg indstillingen Start et program på Handlingsskærmen.
på Start, en Programskærm, Angiv batchfilens fulde sti. Du kan finde filen ved at gennemse mapperne. I vores tilfælde er batchfilen oprettet i C:\ DatabaseScripts, så jeg har givet batchfilens fulde sti. Sørg for, at den bruger, der har oprettet tidsplanen, skal have læse-skriveadgang i det bibliotek, hvor batchfilen er oprettet. Klik på Næste.
på oversigtsskærmen kan du gennemgå detaljerne for den oprettede opgave. Klik på Udfør.
du kan se opgaven i opgave schedular vinduer. Lad os nu teste den konfigurerede opgave. For at gøre det skal du højreklikke på Kontroller databaseintegritet og klikke på Kør. Alternativt kan du klikke på linket med navnet Kør fra højre pande.
konsistenskontrolprocessen begynder.
processen blev afsluttet med succes. Du kan bekræfte detaljerne fra fanen Opgavehistorik i opgaveskemaet.
vi har gendannet en beskadiget database, så vi har modtaget en e-mail med databasens konsistensfejl. E-mailen ligner følgende billede.
oversigt
denne artikel forklarede, hvordan vi kan identificere databasekorruption ved hjælp af et batchscript, der er planlagt i vinduerne task schedular. Denne artikel kan være nyttig for de databaseadministratorer på entry level, der ønsker at automatisere databasevedligeholdelsesopgaverne i DATABASEVEDLIGEHOLDELSESDATABASEN, der er oprettet eller gendannet. I min næste artikel lærer vi, hvordan vi kan automatisere indeksvedligeholdelsen af en database, der er oprettet i en serverudgave ved hjælp af en Task scheduler. Stay tuned!
- forfatter
- Seneste indlæg
han har ekspertise inden for databasedesign, performance tuning, backup og recovery, ha og DR opsætning, databasemigrationer og opgraderinger. Han har afsluttet B. Tech fra Ganpat University. Han kan nås på [email protected]
- Sådan flyttes tabeller til en anden filgruppe i en database – 14. December 2021
- Konfigurer ODBC-drivere til Oracle 19c-9. December 2021
- Konfigurer en linket Server mellem ODBC-serveren og postgraduate ved hjælp af ODBC-drivere-December 6, 2021