Wprowadzenie
Biorąc pod uwagę wszystkie postępy w SQL Server i danych, wspaniale jest, że takie natywne narzędzia SQL, jak Alerty i Operatory, są nadal dostępne. Są to kluczowe funkcje agenta SQL Server, które są powiązane z wszystkim w automatyzacji SQL Server.
Ich role są jasne:
- Alerty, po skonfigurowaniu, informują administratorów baz danych o wystąpieniu określonego zdarzenia.
- Operator to obiekt zdefiniowany w SQL Server, który odwzorowuje każdego lub grupę, która może otrzymywać powiadomienia o wystąpieniu tych zdarzeń.
Rodzaje wydarzeń
SQL Server rejestruje zdarzenia w Dzienniku aplikacji Windows – mamy do niego dostęp poprzez Podgląd zdarzeń Windows z poziomu systemu operacyjnego. SQL Server Agent może odczytywać dziennik aplikacji i uruchamiać alerty, gdy istnieje zgodność między 2 kategoriami rzeczy:1) zdarzenia zarejestrowane w dzienniku aplikacji 2) alert zdefiniowany przez administratora.
Istnieją trzy główne typy wydarzeń:
- Zdarzenia SQL Server
- Warunki wydajności SQL Server
- Zdarzenia WMI
Tworzenie zdarzenia SQL Server
Tworzenie alertu SQL Server Agent rozpoczynamy od kliknięcia prawym przyciskiem myszy węzła Alerts w eksploratorze obiektów w obszarze SQL Server Agent. Spowoduje to otwarcie okna pokazanego na rys. 2, w którym określasz nazwę alertu, jego typ (w tym przypadku Alert zdarzeń SQL Server), zakres bazy danych i warunki alertu.
Najprostszym sposobem określenia warunku jest użycie poziomu istotności. Aby uzyskać pełną listę komunikatów o błędach w programie SQL Server, należy wykonać zapytanie sys.messages. Zwróć uwagę, że ten widok zawiera 309408 wierszy, więc użycie filtra to świetny pomysł – dlatego w moim zapytaniu przefiltrowałem angielski za pomocą polecenia.
Rys. 1. Węzeł alertów
-- Listing 1:Komunikaty o błędach serwera SQL Użyj msdbgoSELECT * FROM sys.messages gdzie language_id=1033kolejność według ważności;
Rys. 2. Tworzenie alertu zdarzenia SQL Server
Zauważ, że mogę również użyć konkretnego komunikatu o błędzie do wywołania alertu. Jak wspomniano wcześniej, wszystkie komunikaty o błędach są wymienione w sys.messages widoku wykazu programu SQL Server. Na ekranie Rys. 2 wybrałem jedynie warunki zdarzenia – strona odpowiedzi pozwoliła mi wybrać, co się stanie, jeśli to zdarzenie zostanie przechwycone. Jak widać, mogę albo zautomatyzować moją odpowiedź, wykonując zadanie, albo po prostu powiadomić operatorów. Później przyjrzymy się wykonaniu zadania, ale na razie przyjrzyjmy się, dlaczego Operator jest zobowiązany do skorzystania z alternatywnej opcji. Stworzymy operator w tym samym oknie, ale gdybyśmy mieli już istniejące operatory, moglibyśmy po prostu wybrać je z listy.
Rys. 3. Wybieranie odpowiedzi
Rys. 4. Definiowanie operatora
Rys. 5. Wybieranie kanału alertów
Na Rys. 5 wybieramy Email jako medium do wysyłania powiadomień. Należy poprawnie skonfigurować pocztę bazy danych, w przeciwnym razie wygenerowane alerty pozostaną w kolejce. Na trzeciej stronie okna Nowy alert możemy wybrać, czy komunikat o błędzie jest zawarty w powiadomieniu e-mail i czy chcemy wysłać dodatkową wiadomość (na przykład instrukcję dla Junior DBA o dalszych działaniach). Określamy również interwał między uruchamianymi alertami. To ważne, ponieważ jeśli zostawisz to na domyślnym (0), skrzynka pocztowa operatora będzie pełna alertów w krótkim czasie.
Rys .6. Opcje konfiguracji
-- Listing 2:Tworzenie alertu serwera SQL przy użyciu sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=1,@delay_between_respon 900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'Alert_Insufficient_Resources_017', @operator_name=N'DatabaseAdmin', @GO_method pre>Listing 2 przedstawia równoważny kod implementacji tego alertu. Gdy zakończymy proces, klikając OK, będziemy mogli wyświetlić zarówno alert, jak i operator w węźle SQL Server Agent w Eksploratorze obiektów.
Rys. 7. Utworzono alert
Tworzenie alertu o stanie wydajności serwera SQL
Możemy również wybrać alternatywną trasę i utworzyć alert o stanie wydajności. Jako przykład wybieramy Databases> Percent Log Used Counter. Mówimy SQL Server, aby wygenerował zdarzenie, gdy użycie pliku dziennika przekroczy 75%. W tym przypadku jako odpowiedź wybieramy „wykonać zadanie”. Listing 3 pokazuje główne zadania wykonywane przez to zadanie, a Listing 4 pokazuje pełną definicję zadania.
Rys. 8. Powiadomienie o stanie wydajności
-- Listing 3:Komunikaty o błędach programu SQL ServerBACKUP LOG [DB1] TO DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'Z RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Listing 4:Pełna definicja zadania kopii zapasowej agenta SQL USE [msdb]GO/****** Obiekt :Data skryptu zadania [DB1_BackupTransactionLog]:27.11.2019 19:20:22 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Obiekt:JobCategory [[bez kategorii (lokalny )]] Data skryptu:27.11.2019 19:20:23 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (local)]' AND category_class =1) BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Bez kategorii (lokalne)]'IF (@@@ERROR <> 0 OR @ ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode =msdb.dbo.sp_add_job @job_name=N'DB1_BackupTransactionLog',@enabled=1, @notify_level_eventlog=0,@notify_level_email=3,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'Utwórz kopię zapasową dziennika transakcji dla DB1, gdy użycie dziennika transakcji przekroczy 75%',@category_name=N' [Uncategorized (Local)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Obiekt:Krok [Backup_Transaction_Log] Data skryptu:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Backup_Transaction_Log',@step_id=1,@cmdexec_success_code=0,@on_success_action=3,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@interretry_retryor,priorytet_val=2 =0, @subsystem=N'TSQL',@command=N'-- Listing 3:Komunikaty o błędach SQL Server LOG BACKUP [DB1] NA DYSKU =N''E:\MSSQL\Backup\DBTransactionLog.bak''Z RETAINDAYS =90, NOFORMAT, NOINIT, NAZWA =N''DB1-Kopia zapasowa dziennika transakcji'',POMIŃ, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 LUB @ReturnCode <> 0) PRZEJDŹ do QuitWithRollback/****** Obiekt:Krok [DB1_Shrink_Transaction_Log_File] Data skryptu:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@step_id=2, @cmdexec_success_code=0,@on_success_action=1,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=2,@retry_interval=15,@os_run_priority=0, @TSQL',@NSQL'system==N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 LUB @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_jobserverIjob @job_id =@server_name =N'(local)'IF (@@ERROR <> 0 LUB @ReturnCode <> 0) Idź do QuitWithRollbackCOMMIT TRANSACTIONIdź do EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) WYCOFANIE TRANSAKCJIEndSave:GO
Rys. 9. Utwórz zadanie do wykonanego
Ponieważ naszą odpowiedzią w tym przypadku jest wykonanie zadania, dołączamy również powiadomienie w samym zadaniu. Po zakończeniu tworzenia zadania możemy przejrzeć właściwości alertu w Eksploratorze obiektów. Możemy sprawdzić na Stronie Historii, ile razy zdarzenie miało miejsce.
Rys. 10. Opcje alertów
Rys. 11. Strona historii alertów
Wniosek
W tym artykule zbadaliśmy tworzenie alertów i operatorów. Możesz skorzystać z tej potężnej możliwości programu SQL Server i skonfigurować środowisko do monitorowania podstawowych zdarzeń bez kupowania narzędzia innej firmy. Możliwość wykorzystania zadań do rozwiązywania drobnych problemów pomaga nam w proaktywnym zarządzaniu naszym środowiskiem SQL Server.