sprawdzanie integralności bazy danych SQL jest jednym z najważniejszych i najważniejszych zadań administratora bazy danych. Zadanie integralności bazy danych sprawdza integralność strukturalną i alokację wszystkich obiektów i indeksów bazy danych. Sprawdzanie integralności może być przeprowadzone za pomocą polecenia DBCC CheckDB. Polecenie CheckDB służy do identyfikacji uszkodzeń w bazie danych. Polecenie wykonuje następujące operacje na bazie danych.
- wykonuje tabelę kontrolną DBCC na każdej tabeli i widok
- wykonuje DBCC CHECKCATALOG na bazach danych
- wykonuje DBCC CHECKALLOC na bazach danych
- weryfikuje dane brokera usług
- weryfikuje zawartość indeksowanych widoków
możesz przeczytać DBCC CHECKDB (Transact-SQL), aby dowiedzieć się więcej o komendzie DBCC CHECKDB.
zazwyczaj bazy danych tworzą niestandardowe skrypty w celu identyfikacji uszkodzeń w bazach danych. Ale jeśli pracujesz na wielu bazach danych, przeglądanie dzienników generowanych przez polecenie DBCC CheckDB staje się nudne. Stworzyłem więc procedurę składowaną SQL, która wykonuje się we wszystkich bazach danych, a jeśli znajdzie jakiekolwiek błędy spójności, wysyła szczegóły do zespołu DBA.
w moim poprzednim artykule, Automatyzacja kopii zapasowych bazy danych SQL za pomocą Harmonogramu zadań systemu Windows, wyjaśniłem, w jaki sposób możemy zautomatyzować proces generowania pełnej i różnicowej kopii zapasowej bazy danych SQL przywróconej w SQL server express edition. W tym artykule wyjaśniamy, w jaki sposób możemy zautomatyzować sprawdzanie spójności bazy danych SQL utworzonej w SQL Server express edition. Aby zademonstrować, pobrałem przykładową bazę danych stąd. Zainstalowałem SQL Server Express edition i przywróciłem bazę danych za pomocą następującego polecenia:
1
2
3
4
5
6
7
|
USE
GO
RESTORE DATABASE FROM DISK = N ” C:\SQL Backup \ DemoCorruptMetadata2008R2.bak ’
WITH FILE = 1,
MOVE N 'Democorruptmetadata’TO N’ C:\Program Files \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata.mdf’,
przenieś N 'Democorruptmetadata_log’do N’ C:\Program Files \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, STATS = 5
|
po przywróceniu bazy danych uruchom polecenie DBCC CheckDB, aby wyświetlić błędy.
1
2
3
4
5
|
Ustaw nocount na
GO
użyj master
GO
dbcc checkdb (DemoCorruptMetadata) z all_errormsgs, no_infomsgs
|
jak widać na powyższym obrazku, baza danych jest uszkodzona, a polecenie sprawdzania spójności zgłosiło błędy. Aby wykonać sprawdzanie spójności, utworzyłem procedurę składowaną, która
- uruchamia sprawdzanie spójności we wszystkich bazach danych SQL, a jeśli znajdzie jakiekolwiek błędy spójności, wstawia te błędy w tabeli tymczasowej
- Wyodrębnij wiadomość z tabeli tymczasowej i wyślij wiadomość e-mail w formacie HTML do zespołu DBA
kod procedury składowanej jest pokazany poniżej:
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
(
imie VARCHAR(500)
)
INSERT INTO # userdatabases
SELECT NAME
FROM sys.bazy danych
gdzie database_id > 4
SET @DBcount=(SELECT Count(1)
z #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @DBName = (SELECT TOP 1 NAME
z #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’)
delete from #userdatabases
where name = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
–select MessageText from #errormsgs
DECLARE @subject nvarchar(max)
DECLARE @tableHTML nvarchar(max)
set @subject = 'raport kontroli konsystencji bazy danych dla serwera :’
+ @@nazwa serwera
SET @ tableHTML =
’ <html ><Body ><style type=”text/css”> table {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; font-weight: bold; font-family: verdana; text-align: left; < / style>< H3> podsumowanie sprawdzania konsystencji bazy danych na serwerze ’
+ @@nazwa serwera + '< / H3> '+ N ’ < obramowanie tabeli=”1″>’
+ N ’ <tr><th>MessageText</th><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> < / Body>’
EXEC msdb..Sp_send_dbmail
@profile_name = 'DBMailProfile’,
@odbiorcy = 'ni*********[email protected]’,
@subject = @ subject,
@importance = 'High’,
@ body = @tableHTML,
@ body_format = 'HTML’;
|
jak wiadomo, wersja SQL Server Express nie obsługuje poczty w bazie danych, ale można skonfigurować pocztę w bazie danych za pomocą zapytań T-SQL. Możesz przeczytać ten artykuł, Konfiguracja poczty bazy danych w SQL Server Express edition, aby szczegółowo zrozumieć proces.
SQL Server Express edition nie obsługuje agentów SQL Server, więc używamy harmonogramu zadań systemu Windows. Windows schedular może wykonać plik wsadowy, więc utworzyłem plik wsadowy, który wykonuje procedurę składowaną za pomocą polecenia SQLCMD. Kod pliku wsadowego jest następujący.
1
|
sqlcmd-S Nisarg-PC\SQLEXPRESS-Q „execute sp_DB_Integrity_check” – D DBATools
|
Określ polecenie w edytorze tekstu i zapisz plik jako *.teczka nietoperza. Teraz stwórzmy zadanie za pomocą Harmonogramu zadań systemu windows. Otwórz Panel sterowania otwórz Narzędzia administratora Otwórz Harmonogram zadań. W Harmonogramie zadań kliknij Utwórz podstawowe zadanie. Na pierwszym ekranie określ nazwę zadania i opis.
sprawdzanie spójności bazy danych powinno być wykonywane co tydzień, więc określ tydzień na ekranie wyzwalaczy Zadań.
skrypt powinien być wykonywany w każdą niedzielę o 1:00 rano, więc określ 01:00:00 w polu tekstowym Start. Zadanie powinno być wykonywane raz w tygodniu, więc w każdym polu tekstowym podaj 1. Wybierz niedzielę z listy dni.
uruchamiamy skrypt wsadowy, aby sprawdzić uszkodzenie bazy danych, więc wybierz opcję Uruchom program na ekranie akcji.
na ekranie startowym programu określ pełną ścieżkę pliku wsadowego. Możesz znaleźć plik, przeglądając katalogi. W naszym przypadku plik wsadowy został utworzony w C:\ DatabaseScripts, więc podałem pełną ścieżkę pliku wsadowego. Upewnij się, że użytkownik, który utworzył harmonogram, musi mieć dostęp do odczytu i zapisu w katalogu, w którym został utworzony plik wsadowy. Kliknij Dalej.
na ekranie podsumowania możesz przejrzeć szczegóły utworzonego zadania. Kliknij przycisk Zakończ.
możesz wyświetlić zadanie w oknach harmonogramu zadań. Teraz przetestujmy skonfigurowane zadanie. Aby to zrobić, kliknij prawym przyciskiem myszy Sprawdź integralność bazy danych i kliknij Uruchom. Alternatywnie, kliknij na link o nazwie Run od prawej-pan.
rozpoczyna się proces sprawdzania spójności.
proces zakończył się pomyślnie. Szczegóły można sprawdzić na karcie Historia zadań harmonogramu zadań.
przywróciliśmy uszkodzoną bazę danych SQL, więc otrzymaliśmy wiadomość e-mail z błędami spójności bazy danych. E-mail wygląda jak poniższy obrazek.
podsumowanie
w tym artykule wyjaśniono, w jaki sposób możemy zidentyfikować uszkodzenie bazy danych za pomocą skryptu wsadowego, który został zaplanowany w Harmonogramie zadań systemu Windows. Ten artykuł może być przydatny dla podstawowych administratorów baz danych, którzy chcą zautomatyzować zadania konserwacji bazy danych bazy danych SQL utworzonej lub przywróconej w SQL server express edition. W następnym artykule dowiemy się, jak możemy zautomatyzować obsługę indeksu bazy danych SQL utworzonej w SQL Server express edition za pomocą Harmonogramu zadań Windows. Zostańcie z nami!
- Autor
- Ostatnie posty
ma doświadczenie w projektowaniu baz danych, dostrajaniu wydajności, tworzeniu kopii zapasowych i odzyskiwaniu, konfiguracji HA i DR, migracjach baz danych i aktualizacjach. Ukończył studia B. Tech na Uniwersytecie Ganpat. Można się z nim skontaktować NA [email protected]
- jak przenieść tabele do innej grupy plików bazy danych SQL – grudzień 14, 2021
- Konfigurowanie sterowników ODBC dla Oracle 19c – grudzień 9, 2021
- Konfigurowanie serwera połączonego między SQL Server i PostgreSQL za pomocą sterowników ODBC – grudzień 6, 2021