Die SQL-Datenbankintegritätsprüfung ist eine der wichtigsten und wichtigsten Aufgaben des Datenbankadministrators. Die Datenbankintegritätsaufgabe überprüft die strukturelle Integrität und Zuordnung aller Datenbankobjekte und Indizes. Die Integritätsprüfungen können mit dem Befehl DBCC CheckDB durchgeführt werden. Der Befehl CheckDB wird verwendet, um die Beschädigung in der Datenbank zu identifizieren. Der Befehl führt die folgenden Vorgänge in der Datenbank aus.
- Führt die DBCC CHECKTABLE für jede Tabelle und Ansicht aus
- Führt den DBCC CHECKCATALOG für die Datenbanken aus
- Führt das DBCC CHECKALLOC für die Datenbanken aus
- Validiert die Service Broker-Daten
- Validiert den Inhalt indizierter Ansichten
Sie können DBCC CHECKDB (Transact-SQL) lesen, um mehr über den Befehl DBCC CheckDB zu erfahren.
Normalerweise erstellen DBAs benutzerdefinierte Skripte, um die Beschädigung in den Datenbanken zu identifizieren. Wenn Sie jedoch an mehreren Datenbanken arbeiten, wird es mühsam, die vom Befehl DBCC CheckDB generierten Protokolle zu überprüfen. Daher habe ich eine gespeicherte SQL-Prozedur erstellt, die in allen Datenbanken ausgeführt wird, und wenn Konsistenzfehler festgestellt werden, werden die Details an das DBA-Team gesendet.
In meinem vorherigen Artikel Automatisieren von SQL-Datenbanksicherungen mit Windows Task Scheduler hatte ich erklärt, wie wir den Prozess automatisieren können, um eine vollständige und differentielle Sicherung der in SQL Server Express Edition wiederhergestellten SQL-Datenbank zu generieren. In diesem Artikel wird erläutert, wie wir die Konsistenzprüfung der in SQL Server Express Edition erstellten SQL-Datenbank automatisieren können. Zur Demonstration habe ich eine Beispieldatenbank von hier heruntergeladen. Ich habe SQL Server Express Edition installiert und die Datenbank mit dem folgenden Befehl wiederhergestellt:
1
2
3
4
5
6
7
|
USE
GO
DATENBANK VON FESTPLATTE WIEDERHERSTELLEN = N’C:\SQL Backup\DemoCorruptMetadata2008R2.bak‘
MIT FILE = 1,
VERSCHIEBE N’Democorruptmetadata‘ NACH N’C:\Program Dateien\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATEN \DemoCorruptMetadata.mdf‘,
VERSCHIEBEN SIE N’Democorruptmetadata_log‘ NACH N’C:\Program Dateien\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\DemoCorruptMetadata_log.ldf‘,
SUBSTANTIVE, STATISTIKEN = 5
|
Sobald eine Datenbank wiederhergestellt ist, führen wir den Befehl DBCC CheckDB aus, um die Fehler anzuzeigen.
1
2
3
4
5
|
setze nocount auf
GO
benutze master
GO
dbcc checkdb (DemoCorruptMetadata) mit all_errormsgs, no_infomsgs
|
Wie Sie im obigen Bild sehen können, ist die Datenbank beschädigt und der Befehl Konsistenzprüfung hat Fehler gemeldet. Um die Konsistenzprüfung durchzuführen, habe ich eine gespeicherte Prozedur erstellt, die
- Die Konsistenzprüfung für alle SQL-Datenbanken ausführt, und wenn Konsistenzfehler gefunden werden, werden diese Fehler in eine temporäre Tabelle eingefügt
- Extrahieren Sie die Nachricht aus der temporären Tabelle und senden Sie die HTML-formatierte E-Mail an das DBA-Team
Der Code der gespeicherten Prozedur:
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
(
NAME VARCHAR(500)
)
INSERT INTO #userdatabases
SELECT NAME
FROM sys.datenbanken
WO database_id > 4
SET @DBcount=(SELECT Count(1)
VON #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @DBName = (SELECT TOP 1 NAME
VON #userdatabases)
SET @ dbcccommand=’dbcc checkdb (‚ + @DBName
+ ‚) with no_infomsgs, all_errormsgs,tableresults‘
INSERT INTO #errormsgs
EXEC (‚dbcc checkdb (‚ +@DBName +
‚) with no_infomsgs, all_errormsgs, tableresults‘)
AUS #userdatabases LÖSCHEN
WHERE NAME = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
–Wählen Sie messageText aus #errormsgs
DECLARE @subject NVARCHAR(max)
DECLARE @tableHTML NVARCHAR(max)
SET @subject = ‚Bericht zur Überprüfung der Datenbankkonsistenz für Server : ‚
+ @@ servername
SETZEN @tableHTML =
‚ < html> <Körper> <style type=“text / css“> Tabelle {Schriftgröße: 9.0pt; Schriftfamilie: verdana; Textausrichtung: links;} tr {Textausrichtung: links;} h3 { Anzeige: Block; Schriftgröße: 15.0pt; schriftstärke: fett; Schriftfamilie: verdana; Textausrichtung: links; } </style> <H3> Sommerliche Überprüfung der Datenbankkonsistenz auf dem Server ‚
+ @@ servername + ‚</H3>‘ + N'<Tabellenrand=“1″>‘
+ N'<tr><th>Nachrichtentext</th><th>Beschädigte Datenbank</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'</Tabelle> </html> </Körper>‘
EXEC msdb..Sp_send_dbmail
@profile_name = ‚DBMailProfile‘,
@Empfänger = ’ni*********[email protected]‘,
@ betreff = @Betreff,
@Wichtigkeit = ‚Hoch‘,
@body = @TABELLEHTML,
@body_format = ‚HTML‘;
|
Wie Sie wissen, unterstützt die SQL Server Express Edition keine Datenbank-E-Mails, aber Sie können die Datenbank-E-Mails mithilfe von T-SQL-Abfragen konfigurieren. Sie können diesen Artikel lesen, Datenbank-Mail-Konfiguration in der SQL Server Express Edition, um den Prozess im Detail zu verstehen.
Die SQL Server Express Edition unterstützt keine SQL Server-Agenten, daher verwenden wir den Windows Task Schedular. Daher habe ich eine Batchdatei erstellt, die eine gespeicherte Prozedur mit dem Befehl SQLCMD ausführt. Der Code der Batchdatei lautet wie folgt.
1
|
sqlcmd -S Nisarg-PC\SQLExpress -Q „sp_DB_Integrity_check ausführen“ -d DBATools
|
Geben Sie den Befehl im Texteditor an und speichern Sie die Datei als *.bat-Datei. Lassen Sie uns nun eine Aufgabe mit Windows Task Schedular erstellen. Systemsteuerung öffnen Administrator-Tools öffnen Taskplaner öffnen. Klicken Sie im Aufgabenplan auf Basisaufgabe erstellen. Geben Sie im ersten Bildschirm den Namen der Aufgabe und die Beschreibung an.
Die Prüfung der Datenbankkonsistenz sollte jede Woche durchgeführt werden.
Das Skript sollte jeden Sonntag um 1:00 Uhr ausgeführt werden, geben Sie daher 01:00:00 im Textfeld Start an. Der Job sollte einmal pro Woche ausgeführt werden, geben Sie also 1 in Recur every textbox an. Wählen Sie Sonntag aus der Liste der Tage.
Wir führen ein Batch-Skript aus, um die Beschädigung der Datenbank zu überprüfen.
Geben Sie auf dem Startbildschirm eines Programms den vollständigen Pfad der Stapeldatei an. Sie können die Datei finden, indem Sie die Verzeichnisse durchsuchen. In unserem Fall wurde die Batchdatei in C erstellt:\DatabaseScripts , daher habe ich den vollständigen Pfad der Batchdatei angegeben. Stellen Sie sicher, dass der Benutzer, der den Zeitplan erstellt hat, über Lese- und Schreibzugriff auf das Verzeichnis verfügt, in dem die Batchdatei erstellt wurde. Klicken Sie auf Weiter.
Auf dem Übersichtsbildschirm können Sie die Details der erstellten Aufgabe überprüfen. Klicken Sie auf Fertig stellen.
Sie können die Aufgabe in Task schedular Fenster anzuzeigen. Lassen Sie uns nun die konfigurierte Aufgabe testen. Klicken Sie dazu mit der rechten Maustaste auf Datenbankintegrität prüfen und dann auf Ausführen. Alternativ klicken Sie auf den Link mit dem Namen Ausführen aus der rechten Pfanne.
Der Konsistenzprüfungsprozess beginnt.
Der Prozess wurde erfolgreich abgeschlossen. Sie können die Details auf der Registerkarte Vorgangshistorie des Vorgangsplans überprüfen.
Wir haben eine beschädigte SQL-Datenbank wiederhergestellt, sodass wir eine E-Mail mit den Datenbankkonsistenzfehlern erhalten haben. Die E-Mail sieht aus wie das folgende Bild.
Zusammenfassung
In diesem Artikel wurde erläutert, wie wir Datenbankbeschädigungen mithilfe eines Stapelskripts identifizieren können, das im Windows Task Schedular geplant wurde. Dieser Artikel kann für Datenbankadministratoren der Einstiegsebene nützlich sein, die die Datenbankwartungsaufgaben der in SQL Server Express Edition erstellten oder wiederhergestellten SQL-Datenbank automatisieren möchten. In meinem nächsten Artikel erfahren wir, wie wir die Indexpflege der in SQL Server Express Edition erstellten SQL-Datenbank mithilfe des Windows-Taskplaners automatisieren können. Bleiben Sie dran!
- Autor
- Neueste Beiträge
Er verfügt über Fachwissen in den Bereichen Datenbankdesign, Leistungsoptimierung, Sicherung und Wiederherstellung, HA- und DR-Einrichtung, Datenbankmigrationen und Upgrades. Er hat den B.Tech von der Ganpat University abgeschlossen. Er kann auf nisargupadhyay87 @outlook erreicht werden.kom
- Verschieben von Tabellen in eine andere Dateigruppe einer SQL-Datenbank – 14. Dezember 2021
- Konfigurieren von ODBC-Treibern für Oracle 19c – 9. Dezember 2021
- Konfigurieren eines verknüpften Servers zwischen SQL Server und PostgreSQL mithilfe von ODBC-Treibern – Dezember 6, 2021