SQLShack

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.

  1. wykonuje tabelę kontrolną DBCC na każdej tabeli i widok
  2. wykonuje DBCC CHECKCATALOG na bazach danych
  3. wykonuje DBCC CHECKALLOC na bazach danych
  4. weryfikuje dane brokera usług
  5. 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

błąd spójności bazy danych SQL

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

  1. 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
  2. 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.

Utwórz podstawowy ekran zadania

Utwórz podstawowy ekran zadania

sprawdzanie spójności bazy danych powinno być wykonywane co tydzień, więc określ tydzień na ekranie wyzwalaczy Zadań.

ekran wyzwalania Zadań

ekran wyzwalania 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.

ekran konfiguracji tygodniowego harmonogramu

ekran konfiguracji harmonogramu tygodniowego

uruchamiamy skrypt wsadowy, aby sprawdzić uszkodzenie bazy danych, więc wybierz opcję Uruchom program na ekranie akcji.

Ekran Akcji zadania

Ekran Akcji zadania

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.

Uruchom ekran programu

Uruchom ekran programu

na ekranie podsumowania możesz przejrzeć szczegóły utworzonego zadania. Kliknij przycisk Zakończ.

 ekran podsumowania

ekran podsumowania

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.

Wyświetl historię zadań

rozpoczyna się proces sprawdzania spójności.

rozpoczyna się proces DBCC CheckDB

proces zakończył się pomyślnie. Szczegóły można sprawdzić na karcie Historia zadań harmonogramu zadań.

Historia wykonywania 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.

e-mail o błędzie spójności

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
Nisarg Upadhyay
Nisarg Upadhyay jest administratorem baz danych SQL Server i certyfikowanym profesjonalistą Microsoft, który ma ponad 8-letnie doświadczenie w administrowaniu serwerami SQL i 2-letnie doświadczenie w administrowaniu bazami danych Oracle 10g.
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]

Nisarg Upadhyay
najnowsze posty Nisarg Upadhyay (Zobacz wszystkie)
  • 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

Write a Comment

Twój adres e-mail nie zostanie opublikowany.