Introduktion
Med alla framsteg inom SQL Server och data, känns det bra att sådana inbyggda SQL-verktyg som Alerts och Operators fortfarande är tillgängliga. De är nyckelfunktionerna i SQL Server Agent som är relaterade till allt inom SQL Server-automatisering.
Deras roller är tydliga:
- Varningar, när de är konfigurerade, låter databasadministratörer veta när en angiven händelse har inträffat.
- En operatör är ett objekt definierat i SQL Server som mappar vem som helst eller en grupp som kan ta emot meddelanden när dessa händelser inträffar.
Typer av evenemang
SQL Server registrerar händelser till Windows Application Log – vi kan komma åt den via Windows Event Viewer på operativsystemnivå. SQL Server Agent kan läsa applikationsloggen och avfyra varningar när det finns en matchning mellan 2 kategorier av saker:1) händelser registrerade i applikationsloggen 2) en varning definierad av en administratör.
Det finns tre huvudtyper av evenemang:
- SQL Server-händelser
- Prestandavillkor för SQL Server
- WMI-händelser
Skapa en SQL Server-händelse
Vi börjar skapa en SQL Server Agent-alarm genom att högerklicka på Alerts-noden i objektutforskaren under SQL Server Agent. Detta öppnar fönstret som visas i Fig. 2 där du anger namnet på varningen, dess typ (SQL Server Event Alert i det här fallet), databasens omfattning och varningsvillkor.
Det enklaste sättet att ange ett tillstånd är att använda svårighetsgraden. Och för att få en komplett lista över felmeddelanden i SQL Server måste du fråga sys.messages. Observera att den här vyn innehåller 309408 rader så att använda ett filter är en bra idé – det är därför jag i min fråga har filtrerat för engelska via kommando.
Fig. 1. Varningsnod
-- Lista 1:SQL Server Error Messagesuse msdbgoSELECT * FROM sys.messages där language_id=1033ordning efter allvarlighetsgrad;
Fig. 2. Skapa en SQL Server Event Alert
Observera att jag också kan använda ett specifikt felmeddelande för att utlösa en varning. Som nämnts tidigare listas alla felmeddelanden i SQL Server-katalogvyn sys.messages. På skärmen i Fig. 2 har jag bara valt händelsevillkoren – svarssidan tillät mig att välja vad som händer om denna händelse fångas. Som du kan se kan jag antingen välja att automatisera mitt svar genom att utföra ett jobb eller helt enkelt meddela operatörer. Vi kommer att undersöka hur ett jobb utförs senare, men låt oss nu se varför en operatör måste fortsätta med det alternativa alternativet. Vi kommer att skapa en operatör i samma fönster, men om vi hade befintliga operatörer hade vi helt enkelt kunnat välja dem från listan.
Fig. 3. Välja ett svar
Fig. 4. Definiera en operatör
Fig. 5. Välja varningskanal
I fig 5 väljer vi e-post som medium för att skicka aviseringar. Du bör konfigurera Databas Mail korrekt, annars kommer de genererade varningarna att ligga kvar i kön. På den tredje sidan i fönstret New Alert kan vi välja om felmeddelandet ska inkluderas i e-postmeddelandet och om vi vill skicka ett ytterligare meddelande (till exempel instruktionerna till en Junior DBA om ytterligare åtgärder). Vi bestämmer också intervallet mellan larm som utlöses. Det är viktigt eftersom om du lämnar den på standardinställningen (0), kommer operatörens brevlåda att vara full av varningar på kort tid.
Fig .6. Konfigurera alternativ
-- Lista 2:Skapa en SQL Server-varning med sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=1between,@delayes=1between 900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'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'Ads @method_1_ad_1'ad_1,000000000000000000000 före>Lista 2 visar motsvarande kod för att implementera denna varning. När vi har slutfört processen genom att klicka på OK kommer vi att kunna se både varningen och operatören i SQL Server Agent-noden i Object Explorer.
Fig. 7. Varning skapad
Skapa en varning för SQL Server-prestandavillkor
Vi kan också gå den alternativa vägen och skapa en prestandalarm. Som ett exempel väljer vi Databaser> Procentlogganvänd räknare. Vi säger åt SQL Server att generera en händelse när loggfilanvändningen överstiger 75 %. I det här fallet väljer vi "att utföra ett jobb" som svar. Lista 3 visar de viktigaste uppgifterna som utförs av det här jobbet och Lista 4 visar den fullständiga definitionen av jobbet.
Fig. 8. Prestandavillkorsvarning
-- Lista 3:SQL Server Error MessagesBACKUP LOG [DB1] TO DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Lista 4:Fullständig definition av SQL Agent Backup JobUSE [msdb]GO/****** Objekt :Job [DB1_BackupTransactionLog] Skriptdatum:27/11/2019 7:20:22 PM ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objekt:JobCategory [[Okategoriserad (Lokal) )]] Skriptdatum:27/11/2019 19:20:23 ******/OM INTE FINNS (VÄLJ namn FRÅN msdb.dbo.syscategories WHERE name=N'[Okategoriserad (Lokal)]' OCH kategori_klass =1)BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOBB', @type=N'LOCAL', @name=N'[Okategoriserad (Lokal)]'OM (@@ERROR <> 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'Säkerhetskopiera transaktionsloggen för DB1 när transaktionslogganvändningen överstiger 75%',@category_name=[Uncategorized (Local)]',@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:Steg [Backup_Transaction_Log] Skriptdatum: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,=retry2_försök_5 =0, @subsystem=N'TSQL',@command=N'-- Lista 3:SQL Server Error MessagesBACKUP 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:Steg [DB1_Shrink_Transaction_Log_File] Skriptdatum: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=0', @mandQL'==N'ANVÄND [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GÅ TILL QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackEXEdC @ReturnCoad.I_server =boid_joad @server_name =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO
Fig. 9. Skapa jobb till den körda
Eftersom vårt svar, i det här fallet, är jobbets utförande, inkluderar vi även en avisering i själva jobbet. När vi är klara med jobbskapandet kan vi granska varningsegenskaperna i Object Explorer. Vi kan kontrollera på historiksidan hur många gånger händelsen har inträffat.
Fig. 10. Alternativ för varning
Fig. 11. Sida för varningshistorik
Slutsats
I den här artikeln har vi utforskat skapandet av varningar och operatörer. Du kan dra nytta av denna kraftfulla kapacitet i SQL Server och ställa in din miljö för att övervaka grundläggande händelser utan att köpa ett tredjepartsverktyg. Möjligheten att använda jobb för att korrigera mindre problem hjälper oss att uppnå proaktiv hantering av vår SQL Server-miljö.