SQLShack

sql database integrity check er en av de mest avgjørende og viktige oppgavene til databaseadministratoren. Oppgaven for databaseintegritet kontrollerer strukturell integritet og allokering av alle databaseobjekter og indekser. Integritetskontrollene kan utføres ved hjelp av kommandoen Dbcc CheckDB. CheckDB-kommandoen brukes til å identifisere korrupsjonen i databasen. Kommandoen utfører følgende operasjoner på databasen.

  1. Utfører DBCC CHECKTABLE på hver tabell og visning
  2. Utfører DBCC CHECKCATALOG på databasene
  3. Utfører DBCC CHECKALLOC på databasene
  4. Validerer service broker data
  5. Validerer innholdet i indekserte visninger

du kan lese Dbcc checkdb (Transact-SQL) for å lære mer om kommandoen dbcc checkdb.

Vanligvis oppretter Dbaer egendefinerte skript for å identifisere korrupsjonen i databasene. Men hvis du jobber med flere databaser, blir det kjedelig å gjennomgå loggene generert av dbcc CheckDB-kommandoen. Så jeg har opprettet EN SQL-lagret prosedyre som utfører på tvers av alle databaser, og hvis den finner konsistensfeil, sender den detaljene til dba-teamet.

I min forrige artikkel, Automatiser SIKKERHETSKOPIER AV SQL database ved Hjelp Av Windows Task Scheduler, hadde jeg forklart hvordan vi kunne automatisere prosessen for å generere en full og differensiell sikkerhetskopiering av SQL database gjenopprettet I SQL server express edition. Denne artikkelen forklarer hvordan vi kan automatisere konsistenskontroll AV SQL database som er opprettet I SQL Server express edition. For å demonstrere har jeg lastet ned en prøvedatabase herfra. JEG har installert SQL Server Express edition og gjenopprettet databasen ved hjelp av følgende kommando:

1
2
3
4
5
6
7

BRUK
GJENOPPRETT DATABASE FRA DISK = N’C:\SQL Sikkerhetskopi\DemoCorruptMetadata2008R2.bak ‘
MED FIL = 1,
FLYTT N ‘Democorruptmetadata’Til N’ C:\Program Filer \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata.mdf’,
FLYTT N ‘Democorruptmetadata_log’Til N’ C:\Program Filer \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, STATISTIKK = 5

Når en database er gjenopprettet, la oss kjøre dbcc CheckDB kommandoen for å vise feilene.

1
2
3
4
5

sett nocount på
bruk master
dbcc checkdb (DemoCorruptMetadata) med all_errormsgs, no_infomsgs

Konsistensfeil I SQL database

som du kan se i bildet ovenfor, er databasen skadet, og konsistenskontrollen har rapportert feil. For å utføre konsistenskontrollen har jeg opprettet en lagret prosedyre som

  1. Kjør konsistenskontrollen på alle SQL-databaser, og hvis den finner konsistensfeil, setter den inn feilene i en temp-tabell
  2. Trekk ut meldingen fra temp-tabellen og send HTML-formatert e-post til dba-teamet

koden til den lagrede prosedyren 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)
)
SETT inn #userdatabases
VELG NAVN
FRA sys.databaser
hvor database_id > 4
SET @DBcount=(VELG Antall(1)
fra #userdatabaser)
MENS ( @dbcount > @i )
BEGYNN
SETT @DBName = (VELG TOPP 1 NAVN
fra #userdatabaser)
SETT @DBCCCOMMAND=’dbcc checkdb (‘ + @dbname
+ ‘) med no_infomsgs, All_errormsgs,Tableresults’
sett inn i #errormsgs
exec (‘dbcc CHECKDB (‘ +@DBNAME +
‘) med no_infomsgs, all_errormsgs,tableresults’)
slett fra #userdatabaser
hvor navn = @Dbname
SETT @i=@i + 1
SLUTT
SLIPP TABELL #userdatabaser
SLUTT
–velg Meldingstekst fra #errormsgs
ERKLÆRE @emne NVARCHAR(maks)
ERKLÆRE @tablehtml nvarchar(maks)
set @subject = ‘database consistancy sjekk rapport FOR SERVER :’
+ @@servernavn
SETT @tableHTML =
‘ <html >< Kropp >< stiltype=»tekst/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-vekt: fet; font-familie: verdana; tekst-align: venstre; } < / stil > < H3 > Sommerlig Database Consistancy Sjekk På Serveren ‘
+ @@servernavn + ‘< / H3> ‘+ N’ < tabell kantlinje=»1″>’
+ N ‘ < tr > < th> Meldingtekst < / th> <Th > Korrupte Database < / th> < / tr>’
+ Cast((VELG Isnull(messagetext, «) SOM ‘TD’, «, Isnull(
Db_name(dbid), «) SOM ‘TD’, «, Isnull(repairlevel, «) som ‘TD’
, » fra #errormsgs for xml path ( ‘tr’ ), root) SOM NVARCHAR(
maks))
+ n'</TABELL> </Html> < / Kropp>’
EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@mottakere = ‘ni*********[email protected]’,
@emne = @ emne,
@viktighet = ‘Høy’,
@ body = @ tableHTML,
@body_format = ‘HTML’;

SOM du vet, STØTTER IKKE SQL Server Express edition databasepost, men du kan konfigurere databaseposten ved HJELP AV T-SQL-spørringer. Du kan lese Denne artikkelen, Database mail configuration I SQL Server Express edition for å forstå prosessen i detalj.

SQL Server Express-utgaven støtter IKKE SQL Server-agenter, så; vi bruker Windows oppgave schedular. Windows schedular kan utføre batchfilen, så jeg har opprettet en batchfil som utfører en lagret prosedyre ved hjelp av kommandoen sqlcmd. Koden til batchfilen er følgende.

1
sqlcmd-S Nisarg-PC \ SQLExpress-Q «utfør sp_DB_Integrity_check» – d DBATools

Angi kommandoen i tekstredigereren og lagre filen som *.flaggermusfil. Nå, la oss lage en oppgave ved hjelp av windows task schedular. Åpne Kontrollpanel Åpne Administratorverktøy Åpne Oppgaveplanlegger. I oppgaveskjemaet Klikker Du På Opprett en grunnleggende oppgave. På den første skjermen angir du navnet på oppgaven og beskrivelsen.

 Opprett grunnleggende oppgaveskjerm

Opprett grunnleggende oppgaveskjerm

databasekonsistenskontrollen skal utføres hver uke, så spesifiser ukentlig i oppgaveutløserskjermen.

 Oppgaveutløserskjerm

Task trigger screen

skriptet skal utføres hver søndag kl 1: 00, så spesifiser 01: 00: 00 I Start tekstboksen. Jobben skal utføres en gang hver uke, så spesifiser 1 I Gjenta hver tekstboks. Velg søndag fra listen over dagene.

Ukeplan konfigurasjon skjermen

Ukeplan konfigurasjon skjermen

vi kjører en batch script for å sjekke databasen korrupsjon, så velg Start et program alternativet På Handlingen skjermen.

 Oppgavehandlingsskjerm

Oppgave Handling skjermen

på Start, Et program skjermen, angi hele banen til batch-filen. Du kan finne filen ved å bla gjennom katalogene. I vårt tilfelle har batchfilen blitt opprettet I C:\ DatabaseScripts, så jeg har gitt batchfilens fulle bane. Kontroller at brukeren som har opprettet tidsplanen, må ha lese-skrivetilgang på katalogen der den satsvise filen er opprettet. Klikk På Neste.

Starte en programskjerm

Start en programskjerm

på Sammendragsskjermen kan du se gjennom detaljene for opprettet oppgave. Klikk På Fullfør.

 Sammendrag skjerm

Sammendragsskjerm

du kan vise oppgaven i oppgaveskjedevinduer. Nå, la oss teste den konfigurerte oppgaven. For å gjøre det, høyreklikk På Sjekk Database integritet og klikk På Kjør. Alternativt kan du klikke på linken Som Heter Kjør fra høyre-pan.

Vis oppgavelogg

konsistenskontrollprosessen begynner.

 dbcc CheckDB prosessen begynner

prosessen ble fullført. Du kan kontrollere detaljene fra Kategorien Oppgavelogg i oppgaveskjemaet.

task execution history

Vi har gjenopprettet en ødelagt SQL-database, så vi har mottatt en e-post med databasekonsistensfeilene. E-posten ser ut som følgende bilde.

Konsistensfeil e-post

Sammendrag

denne artikkelen forklarte hvordan vi kan identifisere databasekorrupsjon ved hjelp av et satsvis skript som er planlagt I windows-oppgaveskjemaet. Denne artikkelen kan være nyttig for databaseadministratorer på inngangsnivå som vil automatisere vedlikeholdsoppgavene FOR SQL database som er opprettet eller gjenopprettet i SQL server express edition. I min neste artikkel vil vi lære hvordan vi kan automatisere indeksvedlikeholdet AV SQL database opprettet i SQL Server express edition ved Hjelp Av Windows task scheduler. Følg med!

  • Forfatter
  • Siste Innlegg
Nisarg Upadhyay
Nisarg Upadhyay ER EN SQL Server Database Administrator Og Microsoft certified professional som har mer enn 8 års erfaring MED SQL Server administrasjon og 2 år Med Oracle 10g database administrasjon.
Han har ekspertise innen databasedesign, ytelsesjustering, sikkerhetskopiering og gjenoppretting, HA OG DR-oppsett, databaseoverføringer og oppgraderinger. Han har fullført B. Tech Fra Ganpat University. Han kan nås på [email protected]

Nisarg Upadhyay
Siste innlegg Av Nisarg Upadhyay (se alle)
  • slik flytter du tabeller til en annen filgruppe i EN SQL-database – 14. desember 2021
  • Konfigurer ODBC – Drivere For Oracle 19c-9. desember 2021
  • Konfigurer En Koblet Server mellom SQL Server og PostgreSQL ved HJELP AV ODBC-drivere-desember 6, 2021

Write a Comment

Din e-postadresse vil ikke bli publisert.