SQLShack

SQL database integrity check är en av de viktigaste och viktigaste uppgifterna för databasadministratören. Uppgiften databasintegritet kontrollerar den strukturella integriteten och allokeringen av alla databasobjekt och index. Integritetskontrollerna kan utföras med kommandot DBCC CheckDB. Kommandot CheckDB används för att identifiera korruptionen i databasen. Kommandot utför följande åtgärder i databasen.

  1. kör DBCC CHECKTABLE på varje tabell och visa
  2. kör DBCC CHECKCATALOG på databaserna
  3. kör DBCC CHECKALLOC på databaserna
  4. validerar Service broker data
  5. validerar innehållet i indexerade vyer

du kan läsa DBCC CHECKDB (Transact-SQL) för att lära dig mer om kommandot DBCC CHECKDB.

vanligtvis skapar DBA: er anpassade skript för att identifiera korruptionen i databaserna. Men om du arbetar med flera databaser blir det tråkigt att granska loggarna som genereras av kommandot DBCC CheckDB. Så jag har skapat en SQL-lagrad procedur som körs över alla databaser, och om den hittar några konsistensfel skickar den detaljerna till DBA-laget.

i min tidigare artikel, automatisera SQL-databasbackups med Windows Task Scheduler, hade jag förklarat hur vi kunde automatisera processen för att generera en fullständig och differentiell säkerhetskopiering av SQL-databasen återställd i SQL server express edition. Den här artikeln förklarar hur vi kan automatisera konsekvenskontroll av SQL-databas som skapats i SQL Server express edition. För att demonstrera har jag laddat ner en provdatabas härifrån. Jag har installerat SQL Server Express edition och återställt databasen med följande kommando:

1
2
3
4
5
6
7

använd
Återställ databas från DISK = N’C:\SQL Backup \ DemoCorruptMetadata2008R2.bak ’
med FILE = 1,
flytta N ’Democorruptmetadata’ till N’C:\Program filer \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata.mdf’,
flytta N ’Democorruptmetadata_log’till N’ C:\Program filer \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, statistik = 5

när en databas har återställts, låt oss köra kommandot DBCC CheckDB för att visa felen.

1
2
3
4
5

ange nocount på
använd master
dbcc checkdb (DemoCorruptMetadata) med all_errormsgs, no_infomsgs

Konsekvensfel i SQL-databasen

som du kan se i bilden ovan är databasen skadad och kommandot konsistenskontroll har rapporterat fel. För att utföra konsistenskontrollen har jag skapat en lagrad procedur som

  1. kör konsistenskontrollen på alla SQL-databaser, och om den hittar några konsistensfel, sätter den in dessa fel i en temp-tabell
  2. extrahera meddelandet från temp-tabellen och skicka HTML-formaterad e-post till DBA-laget

koden för den lagrade proceduren visas nedan:

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
(
namn VARCHAR(500)
)
infoga i # userdatabases
välj namn
från sys.databaser
där databas_id > 4
ange @DBcount=(välj räkna(1)
från #userdatabases)
medan ( @DBcount > @i )
börja
Ställ in @DBName = (välj topp 1 namn
från #userdatabases)
Ställ in @DBCCCOMMAND=’DBCC CHECKDB (’ + @dbname
+ ’) med no_infomsgs, all_errormsgs,Tableresults’
infoga i #errormsgs
Exec (’DBCC CHECKDB (’ +@dbname +
’) med no_infomsgs, all_errormsgs,table results’)
ta bort från #userdatabases
där name = @DBName
ange @i=@i + 1
slut
släpp tabell #userdatabases
slut
–Välj meddelandetext från #errormsgs
deklarera @subject NVARCHAR(max)
deklarera @tableHTML nvarchar(max)
set @subject = ’database consistancy check report för server :’
+ @@servernamn
ange @tableHTML =
’ <html> < Body> < style type=”text/css”> tabell {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; font-vikt: fet; font-familj: verdana; text-justera: vänster; } < / stil> <H3>somrig av databasens Konsistenskontroll på servern ’
+ @@servernamn + ’ < / H3>’ + N ’ <tabellram=”1″>’
+ N ’ <tr><TH >meddelandetext< / TH ><TH>korrupt databas</TH> </tr>’
+ Cast((välj Isnull(messagetext, ”) som ’TD’, ”, Isnull(
Db_name(dbid), ”) som ’TD’, ”, Isnull(repairlevel, ”) som ’TD’
, ” från #errormsgs för xml path ( ’tr’ ), root) som NVARCHAR(
max))
+ n'</tabell> </HTML> </kropp>’
EXEC msdb..Sp_send_dbmail
@profile_name = ’DBMailProfile’,
@mottagare = ’ni*********[email protected]’,
@subject = @subject,
@ importance = ’hög’,
@body = @ tableHTML,
@body_format = ’HTML’;

som du vet stöder SQL Server Express edition Inte databaspost, men du kan konfigurera databasposten med T-SQL-frågor. Du kan läsa den här artikeln, Databaspostkonfiguration i SQL Server Express edition för att förstå processen i detalj.

SQL Server Express edition stöder inte SQL Server-agenter, så vi använder Windows task schedular. Windows schedular kan utföra batchfilen, så jag har skapat en batchfil som utför en lagrad procedur med kommandot SQLCMD. Koden för batchfilen är följande.

1
sqlcmd-s Nisarg-PC\SQLExpress-Q ”kör sp_DB_Integrity_check” – d DBATools

ange kommandot i textredigeraren och spara filen som *.bat-fil. Låt oss nu skapa en uppgift med windows task schedular. Öppna Kontrollpanelen öppna administratörsverktyg öppna Schemaläggaren. Klicka på Skapa en grundläggande uppgift i aktivitetsschemat. På den första skärmen anger du namnet på uppgiften och beskrivningen.

 skapa grundläggande uppgiftsskärm

skapa grundläggande uppgiftsskärm

databaskonsistenskontrollen ska utföras varje vecka, så ange varje vecka på skärmen Aktivitetsutlösare.

Aktivitetsutlösarskärm

Task trigger screen

skriptet ska köras varje söndag klockan 1:00, så ange 01:00:00 i Start-textrutan. Jobbet ska utföras en gång varje vecka så ange 1 i återkomma varje textruta. Välj söndag från listan över dagarna.

konfigurationsskärm för veckoschema

konfigurationsskärmen för veckoschema

vi kör ett batchskript för att kontrollera databaskorruption, så välj alternativet Starta ett program på Åtgärdsskärmen.

Åtgärdsskärm

Task Action screen

på Start, en programskärm, ange den fullständiga sökvägen för batchfilen. Du kan hitta filen genom att bläddra igenom katalogerna. I vårt fall har batchfilen skapats i C:\ DatabaseScripts, så jag har tillhandahållit batchfilens fullständiga sökväg. Se till att användaren som har skapat schemat måste ha läs-och skrivåtkomst i katalogen där batchfilen har skapats. Klicka på Nästa.

 starta en programskärm

starta en programskärm

på skärmen sammanfattning kan du granska detaljerna för Skapad uppgift. Klicka på Slutför.

Sammanfattning skärm

Sammanfattning skärm

du kan visa aktiviteten i aktivitetsbeteckningsfönster. Låt oss nu testa den konfigurerade uppgiften. För att göra det, högerklicka på Kontrollera Databasintegritet och klicka på Kör. Alternativt klickar du på länken Kör från högerpanelen.

Visa uppgiftshistorik

processen för kontroll av konsistens börjar.

DBCC CheckDB processen börjar

processen slutfördes framgångsrikt. Du kan verifiera detaljerna från fliken Aktivitetshistorik i aktivitetsschemat.

Task execution history

vi har återställt en skadad SQL-databas, så vi har fått ett e-postmeddelande med databasens konsistensfel. E-postmeddelandet ser ut som följande bild.

e-post för Konsistensfel

sammanfattning

den här artikeln förklarade hur vi kan identifiera databaskorruption med ett batchskript som har schemalagts i Windows-aktivitetsschemat. Den här artikeln kan vara användbar för databasadministratörer på startnivå som vill automatisera databasunderhållsuppgifter för SQL-databas som skapats eller återställts i SQL server express edition. I min nästa artikel kommer vi att lära oss hur vi kan automatisera indexunderhållet av SQL-databas skapad i SQL Server express edition med Windows Task scheduler. Håll ögonen öppna!

  • författare
  • Senaste inlägg
Nisarg Upadhyay
Nisarg Upadhyay är en SQL Server – Databasadministratör och Microsoft-certifierad professionell som har mer än 8 års erfarenhet av SQL Server administration och 2 år med Oracle 10g databasadministration.
han har expertis inom databasdesign, prestandajustering, säkerhetskopiering och återställning, HA-och DR-inställningar, databasmigreringar och uppgraderingar. Han har avslutat B. Tech Från Ganpat University. Han kan nås på [email protected]

Nisarg Upadhyay
Senaste inlägg av Nisarg Upadhyay (se alla)
  • så här flyttar du Tabeller till en annan filgrupp i en SQL-databas-14 December 2021
  • konfigurera ODBC-drivrutiner för Oracle 19c-9 December 2021
  • konfigurera en länkad Server mellan SQL Server och PostgreSQL med ODBC-drivrutiner-December 6, 2021

Write a Comment

Din e-postadress kommer inte publiceras.