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.
- végrehajtja a DBCC CHECKTABLE minden tábla és megtekintése
- végrehajtja a DBCC CHECKCATALOG az adatbázisok
- végrehajtja a DBCC CHECKALLOC az adatbázisok
- érvényesíti a service broker adatok
- 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
|
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
- 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
- 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.
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.
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.
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.
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ő.
az összefoglaló képernyőn megtekintheti a létrehozott feladat részleteit. Kattintson Befejezés.
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.
megkezdődik a konzisztencia-ellenőrzési folyamat.
a folyamat sikeresen befejeződött. A részleteket a Feladatütemező Feladatelőzmények lapján ellenőrizheti.
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.
Ö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
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
- 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