SQLShack használatával

az SQL adatbázis integritásának ellenőrzése az adatbázis-adminisztrátor egyik legfontosabb és legfontosabb feladata. Az adatbázis-integritás feladat ellenőrzi az összes adatbázis-objektum és index szerkezeti integritását és allokációját. Az integritás ellenőrzése a DBCC CheckDB paranccsal hajtható végre. A CheckDB parancs az adatbázis sérülésének azonosítására szolgál. A parancs a következő műveleteket hajtja végre az adatbázisban.

  1. végrehajtja a DBCC CHECKTABLE minden tábla és megtekintése
  2. végrehajtja a DBCC CHECKCATALOG az adatbázisok
  3. végrehajtja a DBCC CHECKALLOC az adatbázisok
  4. érvényesíti a service broker adatok
  5. ellenőrzi a tartalmát indexelt nézetek

elolvashatja a DBCC checkdb (Transact-SQL) parancsot, ha többet szeretne megtudni a DBCC checkdb parancsról.

a DBA-k általában egyéni szkripteket hoznak létre az adatbázisok sérülésének azonosítására. De ha több adatbázison dolgozik, unalmassá válik a DBCC CheckDB parancs által generált naplók áttekintése. Ezért létrehoztam egy SQL tárolt eljárást, amely minden adatbázisban végrehajtódik, és ha bármilyen konzisztencia hibát talál, elküldi a részleteket a DBA csapatnak.

előző cikkemben, az SQL adatbázis-mentések automatizálása a Windows Task Scheduler segítségével, elmagyaráztam, hogyan automatizálhatjuk az SQL server express edition-ben visszaállított SQL adatbázis teljes és differenciális biztonsági mentésének létrehozását. Ez a cikk elmagyarázza, hogyan automatizálhatjuk az SQL Server express edition alkalmazásban létrehozott SQL adatbázis konzisztencia-ellenőrzését. Ennek bemutatására letöltöttem egy minta adatbázist innen. Telepítettem az SQL Server Express kiadást, és visszaállítottam az adatbázist a következő paranccsal:

1
2
3
4
5
6
7

USE
GO
adatbázis visszaállítása lemezről = N’C:\SQL Backup\DemoCorruptMetadata2008R2.bak ‘
fájl = 1,
N ‘Democorruptmetadata’ áthelyezése N’ – be C:\Program fájlok \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata.mdf’,
N ‘Democorruptmetadata_log’ áthelyezése N’ – be C:\Program fájlok \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, statisztika = 5

az adatbázis visszaállítása után futtassuk a DBCC CheckDB parancsot a hibák megtekintéséhez.

1
2
3
4
5

a nocount beállítása
GO
Master használata
GO
dbcc checkdb (DemoCorruptMetadata) all_errormsgs, no_infomsgs

konzisztencia hiba az SQL database

mint látható a fenti képen, az adatbázis sérült, és a konzisztencia ellenőrző parancs hibákat jelentett. A konzisztencia-ellenőrzés elvégzéséhez létrehoztam egy tárolt eljárást, amely

  1. futtassa a konzisztencia-ellenőrzést az összes SQL-adatbázison, és ha konzisztencia-hibát talál, beilleszti ezeket a hibákat egy ideiglenes táblába
  2. bontsa ki az üzenetet a ideiglenes táblából, és küldje el a HTML formátumú e-mailt a DBA-csapatnak

a tárolt eljárás kódja az alábbiakban látható:

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
(
név VARCHAR(500)
)
helyezze be a # userdatabases
válassza ki a
nevet a sys – ből.adatbázisok
ahol database_id > 4
SET @DBcount=(Select Count(1)
FROM #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @dbname = (SELECT TOP 1 név
FROM #userdatabases)
SET @DBCCCOMMAND=’DBCC checkdb (‘ + @dbname
+ ‘) a no_infomsgs, all_errormsgs,Tableresults’
beszúrása #errormsgs
Exec (‘DBCC checkdb (‘ +@DbName +
‘) a no_infomsgs, all_errormsgs,tableresults’)
törlés a #userdatabases-ből
ahol name = @DBName
SET @I=@i + 1
END
DROP TABLE #userdatabases
END
–válassza ki az Üzenetszöveget a #errormsgs
deklarálja @subject NVARCHAR(max)
deklarálja @tableHTML nvarchar(max)
set @subject = ‘adatbázis-konzisztencia-ellenőrzési jelentés a szerverhez :’
+ @@szervernév
SET @tableHTML =
‘ <html > < test> < style type= “text / css” > táblázat {betűméret: 9.0 pt; betűtípus-család: verdana; szöveg-igazítás: bal;} tr {szöveg-igazítás: bal;} h3 { kijelző: Blokk; betűméret: 15.0 pt; betűtípus-súly: félkövér; betűtípus-család: verdana; szöveg-igazítás: balra; } < / stílus> < H3> az adatbázis-konzisztencia-ellenőrzés nyara a szerveren ‘
+ @@kiszolgálónév + ‘< / H3> ‘+ N ‘ < tábla szegély=”1″>’
+ N ‘ < tr>< th> Üzenetszöveg< / th> <th>sérült adatbázis</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'</táblázat> </HTML> < / test>’
EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@recipients = ‘ni*********[email protected]’,
@subject = @ subject,
@fontosság = ‘magas’,
@body = @ tableHTML,
@body_format = ‘HTML’;

mint tudják, az SQL Server Express edition nem támogatja az adatbázis-leveleket, de az adatbázis-leveleket T-SQL lekérdezésekkel konfigurálhatja. Elolvashatja ezt a cikket, adatbázis-Mail konfiguráció az SQL Server Express kiadásban, hogy részletesen megértse a folyamatot.

az SQL Server Express kiadás nem támogatja az SQL Server ügynököket, így; a Windows Feladatütemezőt használjuk. A Windows schedular képes végrehajtani a kötegelt fájlt, ezért létrehoztam egy kötegelt fájlt, amely egy tárolt eljárást hajt végre az SQLCMD paranccsal. A kötegelt fájl kódja a következő.

1
sqlcmd-S Nisarg-PC \ SQLExpress-Q “sp_db_integrity_check végrehajtása” – d DBATools

adja meg a parancsot a szövegszerkesztőben, majd mentse a fájlt *néven.denevér fájl. Most hozzunk létre egy feladatot a windows task schedular használatával. Nyissa meg a Vezérlőpultot nyissa meg a rendszergazdai eszközöket nyissa meg a Feladatütemezőt. A feladat ütemezésében kattintson az alapfeladat létrehozása elemre. Az első képernyőn adja meg a feladat nevét és leírását.

 alapvető feladat képernyő létrehozása

Create basic task screen

az adatbázis konzisztencia ellenőrzését minden héten el kell végezni, ezért adja meg hetente a Feladatindítók képernyőn.

 feladat indító képernyő

feladatindító képernyő

a szkriptet minden vasárnap 1:00 órakor kell végrehajtani, ezért adja meg a 01:00:00 értéket A kezdő szövegmezőben. A munkát hetente egyszer kell végrehajtani, ezért adja meg az 1-et minden szövegdobozban. Válassza a vasárnap lehetőséget a napok listájából.

heti ütemezés konfigurációs képernyő

heti ütemezés konfigurációs képernyő

kötegelt szkriptet futtatunk az adatbázis sérülésének ellenőrzésére, ezért válassza a Program indítása opciót a művelet képernyőn.

 feladat művelet képernyő

feladat művelet képernyő

a Start Program képernyőn adja meg a kötegelt fájl teljes elérési útját. A fájlt a könyvtárak böngészésével találhatja meg. Esetünkben a kötegelt fájlt C-ben hozták létre:\ DatabaseScripts, így megadtam a kötegelt fájl teljes elérési útját. Győződjön meg arról, hogy az ütemezést létrehozó felhasználónak olvasási-írási hozzáféréssel kell rendelkeznie abban a könyvtárban, amelyben a kötegelt fájlt létrehozta. Kattintson Következő.

 Program képernyő indítása

program indítása képernyő

az összefoglaló képernyőn megtekintheti a létrehozott feladat részleteit. Kattintson Befejezés.

összefoglaló képernyő

összefoglaló képernyő

a feladatot a Feladatütemező ablakokban tekintheti meg. Most teszteljük a konfigurált feladatot. Ehhez kattintson a jobb gombbal az adatbázis integritásának ellenőrzése elemre, majd kattintson a Futtatás elemre. Alternatív megoldásként kattintson a megnevezett linkre Fuss a jobb oldali serpenyőből.

Tevékenységelőzmények megtekintése

megkezdődik a konzisztencia-ellenőrzési folyamat.

DBCC CheckDB folyamat kezdődik

a folyamat sikeresen befejeződött. A részleteket a Feladatütemező Feladatelőzmények lapján ellenőrizheti.

feladat végrehajtási előzmények

visszaállítottunk egy sérült SQL adatbázist, így kaptunk egy e-mailt az adatbázis konzisztencia hibáival. Az e-mail a következő képnek tűnik.

Következetességi hiba e-mail

Összegzés

ez a cikk azt ismerteti, hogyan lehet azonosítani az adatbázis sérülését a Windows Feladatütemezőben ütemezett kötegelt parancsfájl segítségével. Ez a cikk hasznos lehet azoknak a belépő szintű adatbázis-rendszergazdáknak, akik automatizálni akarják az SQL server express edition rendszerben létrehozott vagy visszaállított SQL adatbázis adatbázis-karbantartási feladatait. A következő cikkemben megtanuljuk, hogyan automatizálhatjuk az SQL Server express edition-ben létrehozott SQL adatbázis index-karbantartását a Windows Feladatütemező segítségével. Maradjanak velünk!

  • szerző
  • Legutóbbi hozzászólások
Nisarg Upadhyay
Nisarg Upadhyay egy SQL Server adatbázis adminisztrátor és Microsoft certified szakember, aki több mint 8 éves tapasztalattal rendelkezik az SQL Server adminisztrációban és 2 év az Oracle 10g adatbázis adminisztrációban.
szakértelemmel rendelkezik az adatbázis-tervezésben, a teljesítményhangolásban, a biztonsági mentésben és helyreállításban, a HA és DR beállításban, az adatbázis-migrációban és a frissítésekben. Elvégezte a B. Tech A Ganpat Egyetemen. A nisargupadhyay87 @ outlook oldalon érhető el.com

Nisarg Upadhyay
Nisarg Upadhyay legújabb hozzászólásai (az összes megtekintése)
  • táblázatok áthelyezése egy SQL adatbázis másik fájlcsoportjába-December 14, 2021
  • ODBC illesztőprogramok konfigurálása az Oracle 19C számára-December 9, 2021
  • kapcsolt kiszolgáló konfigurálása az SQL Server és a PostgreSQL között ODBC illesztőprogramok használatával-December 6, 2021

Write a Comment

Az e-mail-címet nem tesszük közzé.