SQLShack

kontrola integrity databáze SQL je jedním z nejdůležitějších a nejdůležitějších úkolů správce databáze. Úloha integrity databáze kontroluje strukturální integritu a alokaci všech databázových objektů a indexů. Kontroly integrity lze provést pomocí příkazu DBCC CheckDB. Příkaz CheckDB se používá k identifikaci poškození v databázi. Příkaz provádí následující operace v databázi.

  1. provede kontrolní tabulku DBCC na každé tabulce a zobrazení
  2. provede CHECKCATALOG DBCC v databázích
  3. provede CHECKALLOC DBCC v databázích
  4. ověřuje data zprostředkovatele služeb
  5. ověřuje obsah indexovaných pohledů

můžete si přečíst DBCC CHECKDB (Transact-SQL), abyste se dozvěděli více o DBCC příkaz CHECKDB.

DBA obvykle vytvářejí vlastní skripty pro identifikaci poškození v databázích. Pokud však pracujete na více databázích,je zdlouhavé zkontrolovat protokoly generované příkazem DBCC CheckDB. Takže jsem vytvořil SQL uloženou proceduru, která se provádí ve všech databázích, a pokud zjistí nějaké chyby konzistence, odešle podrobnosti týmu DBA.

v mém předchozím článku Automatizujte zálohování databáze SQL pomocí Plánovače úloh systému Windows, vysvětlil jsem, jak bychom mohli automatizovat proces generování úplné a diferenciální zálohy databáze SQL obnovené v SQL server express edition. Tento článek vysvětluje, jak můžeme automatizovat kontrolu konzistence databáze SQL vytvořené v SQL Server express edition. Pro ukázku jsem si zde stáhl ukázkovou databázi. Nainstaloval jsem SQL Server Express edition a obnovil databázi pomocí následujícího příkazu:

1
2
3
4
5
6
7

použít
jít
obnovit databázi z disku = N’C:\SQL zálohování \ DemoCorruptMetadata2008R2.bak ‚
WITH FILE = 1,
MOVE N ‚Democorruptmetadata’to N‘ C:\Program soubory\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA \ DemoCorruptMetadata.mdf‘,
MOVE N ‚Democorruptmetadata_log’TO N‘ C:\Program soubory\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\DemoCorruptMetadata_log.ldf‘,
podstatná jména, statistiky = 5

po obnovení databáze spusťte příkaz DBCC CheckDB a zobrazte chyby.

1
2
3
4
5

nastavte nocount na
GO
použijte master
GO
dbcc checkdb (DemoCorruptMetadata) s all_errormsgs, no_infomsgs

chyba konzistence databáze SQL

jak můžete vidět na obrázku výše, databáze je poškozena a příkaz kontroly konzistence nahlásil chyby. Chcete-li provést kontrolu konzistence, vytvořil jsem uloženou proceduru, která

  1. spustí kontrolu konzistence ve všech databázích SQL a pokud zjistí nějaké chyby konzistence, vloží tyto chyby do tabulky temp
  2. extrahujte zprávu z tabulky temp a odešlete e – mail ve formátu HTML týmu dba

kód uložené procedury je uveden níže:

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
(
jméno VARCHAR(500)
)
vložit do # userdatabases
vyberte název
ze sys.databáze
kde database_id > 4
SET @DBcount=(SELECT Count(1)
FROM #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @DBName = (SELECT TOP 1 NAME
FROM #userdatabases)
SET @dbcccommand=’dbcc checkdb (‚ + @DBName
+ ‚) s No_infomsgs, all_errormsgs,tableresults‘
vložit do #errormsgs
exec (‚DBCC CHECKDB (‚ +@dbname +
‚) s no_infomsgs, ALL_ERRORMSGS,tableresults‘)
smazat z #userdatabases
kde name = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
END
–select MessageText from #errormsgs
DECLARE @subject NVARCHAR(max)
DECLARE @tableHTML NVARCHAR(max)
SET @subject = ‚kontrola konzistence databáze zpráva pro server :‘
+ @@název serveru
SET @tableHTML =
‚ <html> < Body> <style type=“text/css“ > tabulka {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; hmotnost písma: tučně; Rodina písma: verdana; zarovnání textu: vlevo; } < / style> <H3>letní kontrola konzistence databáze na serveru ‚
+ @@název serveru + ‚< / H3> ‚+ N ‚ <ohraničení tabulky=“1″>‘
+ N ‚ <tr>< th> MessageText< / th>< th >poškozená databáze< / 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'</table> </HTML> < / tělo>‘
EXEC msdb..Sp_send_dbmail
@profile_name = ‚DBMailProfile‘,
@recipients = ‚ni*********[email protected]‘,
@subject = @subject,
@importance = ‚High‘,
@body = @tableHTML,
@body_format = ‚HTML‘;

jak víte, edice SQL Server Express nepodporuje databázovou poštu,ale můžete nakonfigurovat databázovou poštu pomocí dotazů T-SQL. Můžete si přečíst tento článek, Konfigurace databáze pošty v SQL Server Express edition pochopit proces podrobně.

SQL Server Express edition nepodporuje agenty SQL Serveru, takže; používáme systém Windows task schedular. Systém Windows schedular může spustit dávkový soubor, takže jsem vytvořil dávkový soubor, který provádí uloženou proceduru pomocí příkazu SQLCMD. Kód dávkového souboru je následující.

1
sqlcmd-s Nisarg-PC \ SQLExpress-Q „execute sp_DB_Integrity_check“ – d DBATools

zadejte příkaz v textovém editoru a uložte soubor jako *.bat soubor. Nyní vytvořme úkol pomocí systému Windows task schedular. Otevřete Ovládací panely otevřete Nástroje Správce otevřete Plánovač úloh. V plánu úloh klikněte na Vytvořit základní úkol. Na první obrazovce zadejte název úkolu a popis.

 vytvořit základní obrazovku úloh

vytvořit základní obrazovku úlohy

kontrola konzistence databáze by měla být prováděna každý týden, takže zadejte týdenní na obrazovce spouštění úloh.

 obrazovka spouštění úloh

obrazovka spouštění úloh

skript by měl být spuštěn každou neděli v 1: 00, takže do textového pole Start zadejte 01:00:00. Úloha by měla být provedena jednou týdně, takže zadejte 1 v opakování každého textového pole. Vyberte neděli ze seznamu dnů.

obrazovka konfigurace týdenního plánu

týdenní obrazovka konfigurace plánu

spouštíme dávkový skript pro kontrolu poškození databáze, takže na obrazovce Akce vyberte možnost spustit program.

 obrazovka akce úlohy

obrazovka akce úkolu

na úvodní obrazovce programu zadejte úplnou cestu dávkového souboru. Soubor najdete procházením adresářů. V našem případě byl dávkový soubor vytvořen v C:\ DatabaseScripts, takže jsem poskytl úplnou cestu dávkového souboru. Ujistěte se, že uživatel, který vytvořil plán, musí mít přístup ke čtení a zápisu v adresáři, ve kterém byl dávkový soubor vytvořen. Klikněte na další.

spuštění obrazovky programu

spusťte programovou obrazovku

na souhrnné obrazovce si můžete prohlédnout podrobnosti o vytvořené úloze. Klikněte na Dokončit.

souhrnná obrazovka

souhrnná obrazovka

úlohu můžete zobrazit v oknech plánu úloh. Nyní otestujeme nakonfigurovaný úkol. Chcete-li to provést, klepněte pravým tlačítkem myši na zkontrolovat integritu databáze a klikněte na Spustit. Případně klikněte na odkaz s názvem spustit z pravé pánve.

 Zobrazit historii úloh

proces kontroly konzistence začíná.

proces kontroly DBCC začíná

proces byl úspěšně dokončen. Podrobnosti můžete ověřit na kartě Historie úloh v plánu úloh.

 historie provádění úloh

obnovili jsme poškozenou databázi SQL, takže jsme obdrželi e-mail s chybami konzistence databáze. E-mail vypadá jako následující obrázek.

chyba konzistence e-mail

shrnutí

tento článek vysvětlil, jak můžeme identifikovat poškození databáze pomocí dávkového skriptu, který byl naplánován v plánu úloh systému Windows. Tento článek může být užitečné pro správce databáze entry-level, kteří chtějí automatizovat úkoly údržby databáze SQL databáze vytvořené nebo obnovené v SQL server express edition. V mém dalším článku se dozvíme, jak můžeme automatizovat údržbu indexu SQL databáze vytvořené v SQL Server express edition pomocí Plánovače úloh systému Windows. Zůstaňte naladěni!

  • Autor
  • poslední příspěvky
Nisarg Upadhyay
Nisarg Upadhyay je správce databáze SQL Server a certifikovaný profesionál společnosti Microsoft, který má více než 8 let zkušeností s administrací serveru SQL a 2 roky se správou databáze Oracle 10g.
má odborné znalosti v oblasti návrhu databáze, ladění výkonu, zálohování a obnovy, nastavení HA a DR, migrace databází a upgrady. Dokončil B. Tech z Ganpat University. On může být dosaženo na [email protected]

Nisarg Upadhyay
nejnovější příspěvky od Nisarg Upadhyay (Zobrazit vše)
  • jak přesunout tabulky do jiné skupiny souborů databáze SQL-14. prosince 2021
  • konfigurace ovladačů ODBC pro Oracle 19c-9. Prosince 2021
  • konfigurace Propojeného serveru mezi SQL Serverem a PostgreSQL pomocí ovladačů ODBC-prosinec 6, 2021

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.