Introduktion
Med alle fremskridt inden for SQL Server og data, føles det fantastisk, at sådanne native SQL-værktøjer som Alerts og Operators stadig er tilgængelige. De er de vigtigste SQL Server Agent-funktioner, der er relateret til alt inden for SQL Server-automatisering.
Deres roller er klare:
- Alarmer, når de er konfigureret, giver databaseadministratorer besked, når en specificeret hændelse er indtruffet.
- En operatør er et objekt defineret i SQL Server, som kortlægger enhver eller en gruppe, der kan modtage meddelelser, når disse hændelser opstår.
Begivenhedstyper
SQL Server registrerer hændelser til Windows Application Log – vi kan få adgang til den via Windows Event Viewer på operativsystemniveau. SQL Server Agent kan læse applikationsloggen og udløse advarsler, når der er et match mellem 2 kategorier af ting:1) hændelser registreret i applikationsloggen 2) en advarsel defineret af en administrator.
Der er tre hovedtyper af begivenheder:
- SQL Server-hændelser
- Ydelsesbetingelser for SQL Server
- WMI-begivenheder
Oprettelse af en SQL Server-hændelse
Vi begynder at oprette en SQL Server Agent-alarm ved at højreklikke på Alerts-noden i objektudforskeren under SQL Server Agent. Dette åbner vinduet vist i fig. 2, hvor du angiver navnet på advarslen, dens type (SQL Server Event Alert i dette tilfælde), databaseomfang og advarselsbetingelser.
Den enkleste måde at angive en tilstand på er at bruge sværhedsgraden. Og for at få en komplet liste over fejlmeddelelser i SQL Server, skal du forespørge sys.messages. Bemærk, at denne visning indeholder 309408 rækker, så det er en god idé at bruge et filter - det er derfor, jeg i min forespørgsel har filtreret efter engelsk via kommando.
Fig. 1. Advarselsknude
-- Liste 1:SQL Server-fejlmeddelelser brug msdbgoSELECT * FRA sys.messages, hvor language_id=1033rækkefølge efter sværhedsgrad;
Fig. 2. Oprettelse af en SQL Server Event Alert
Bemærk, at jeg også kunne bruge en specifik fejlmeddelelse til at udløse en advarsel. Som tidligere nævnt er alle fejlmeddelelser opført i SQL Server-katalogvisningen sys.messages. På skærmbilledet i fig. 2 har jeg kun valgt hændelsesbetingelserne - svarsiden tillod mig at vælge, hvad der sker, hvis denne hændelse fanges. Som du kan se, kan jeg enten vælge at automatisere mit svar ved at udføre et job eller blot underrette operatører. Vi vil undersøge udførelsen af et job senere, men lad os nu se, hvorfor en operatør er forpligtet til at fortsætte med den alternative mulighed. Vi vil oprette en operatør i det samme vindue, men hvis vi havde eksisterende operatører, kunne vi blot have valgt dem fra listen.
Fig. 3. Valg af et svar
Fig. 4. Definition af en operatør
Fig. 5. Valg af alarmkanalen
I fig. 5 vælger vi e-mail som medium til at sende meddelelser. Du bør konfigurere Database Mail korrekt, ellers forbliver de genererede advarsler i køen. På den tredje side i New Alert-vinduet kan vi vælge, om fejlmeddelelsen er inkluderet i e-mailmeddelelsen, og om vi vil sende en yderligere besked (f.eks. instruktionerne til en Junior DBA om yderligere handlinger). Vi bestemmer også intervallet mellem udsendte alarmer. Det er vigtigt, fordi hvis du lader den stå på standard (0), vil operatørens postkasse være fuld af advarsler i løbet af kort tid.
Fig .6. Konfiguration af indstillinger
-- Liste 2:Oprettelse af en SQL Server-alarm ved hjælp af sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=1between,@enabled=1between_enabled=1 900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-0000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'000000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'0Data_Resource_Ins', GO =N'0Data_Resource_Ins', 2000-02-01 før>Liste 2 viser den tilsvarende kode til implementering af denne advarsel. Når vi har afsluttet processen ved at klikke på OK, vil vi være i stand til at se både advarslen og operatøren i SQL Server Agent-noden i Objekt Explorer.
Fig. 7. Alarm oprettet
Oprettelse af en SQL Server Performance Condition Alert
Vi kan også gå den alternative vej og oprette en præstationstilstandsalarm. Som et eksempel vælger vi Databaser> Procent Log brugt tæller. Vi beder SQL Server om at generere en hændelse, når logfilbrugen overstiger 75 %. I dette tilfælde vælger vi 'at udføre et job' som svar. Liste 3 viser de vigtigste opgaver, der udføres af dette job, og liste 4 viser den komplette definition af jobbet.
Fig. 8. Performance Condition Alert
-- Liste 3:SQL Server-fejlmeddelelserBACKUP LOG [DB1] TO DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATISTIK =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Liste 4:Komplet definition af SQL Agent Backup JobUSE [msdb]GO/****** Objekt :Job [DB1_BackupTransactionLog] Scriptdato:27/11/2019 7:20:22 PM ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objekt:JobCategory [[Uncategorized (Local) )]] Script Dato:27/11/2019 7:20:23 PM ******/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'[Ukategoriseret (Lokal)]'HVIS (@@FEJL <> 0 ELLER @ 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'Sikkerhedskopier transaktionsloggen for DB1, når brugen af transaktionsloggen overstiger 75%',@category_name=[Ukategoriseret (Lokal)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 ELLER <>ReturnCode GO TO 0) /****** Objekt:Trin [Backup_Transaction_Log] Scriptdato:27/11/2019 7:20:23 PM ******/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,@retry2_attempts,=run =0, @subsystem=N'TSQL',@command=N'-- Liste 3:SQL Server-fejlmeddelelserBACKUP LOG [DB1] TO DISK =N''E:\MSSQL\Backup\DBTransactionLog.bak''WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N''DB1-TransactionLog Backup'',SKIP, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback/****** Objekt:Trin [DB1_Shrink_Transaction_Log_File] Scriptdato:27/11/2019 7:20:23 PM ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@step_id @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,@'com, @mandQL'==N'BRUG [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackEXEdC @ReturnCoadjob.Id_I @server_name =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO
Fig. 9. Opret job til den udførte
Da vores svar, i dette tilfælde, er opgavens udførelse, inkluderer vi også en notifikation i selve jobbet. Når vi er færdige med jobskabelsen, kan vi gennemgå advarselsegenskaberne i Object Explorer. Vi kan tjekke på historiksiden, hvor mange gange begivenheden har fundet sted.
Fig. 10. Valgmuligheder for advarsel
Fig. 11. Alarmhistorikside
Konklusion
I denne artikel har vi undersøgt oprettelsen af advarsler og operatører. Du kan drage fordel af denne kraftfulde funktion i SQL Server og konfigurere dit miljø til at overvåge grundlæggende hændelser uden at købe et tredjepartsværktøj. Muligheden for at bruge jobs til at rette mindre problemer hjælper os med at opnå proaktiv styring af vores SQL Server-miljø.