sql >> Database >  >> RDS >> Sqlserver

Waarschuwingen en operators gebruiken in SQL Server

Inleiding

Met alle vooruitgang in SQL Server en data, voelt het geweldig dat native SQL-tools als Alerts en Operators nog steeds beschikbaar zijn. Dit zijn de belangrijkste SQL Server Agent-functies die verband houden met alles in SQL Server-automatisering.

Hun rollen zijn duidelijk:

  • Waarschuwingen, indien geconfigureerd, laten databasebeheerders weten wanneer een gespecificeerde gebeurtenis heeft plaatsgevonden.
  • Een operator is een object dat is gedefinieerd in SQL Server en dat iedereen of een groep toewijst die meldingen kan ontvangen wanneer deze gebeurtenissen plaatsvinden.

Soorten evenementen

SQL Server legt gebeurtenissen vast in het Windows-toepassingslogboek - we hebben er toegang toe via Windows Event Viewer op het niveau van het besturingssysteem. SQL Server Agent kan het toepassingslogboek lezen en waarschuwingen afvuren wanneer er een overeenkomst is tussen 2 categorieën van dingen:1) gebeurtenissen die zijn vastgelegd in het toepassingslogboek 2) een waarschuwing die is gedefinieerd door een beheerder.

Er zijn drie hoofdtypen evenementen:

  • SQL Server-gebeurtenissen
  • Prestatievoorwaarden voor SQL Server
  • WMI-evenementen

Een SQL Server-gebeurtenis maken

We beginnen met het maken van een SQL Server Agent-waarschuwing door met de rechtermuisknop te klikken op het knooppunt Alerts in de objectverkenner onder SQL Server Agent. Dit opent het venster dat wordt getoond in Fig. 2, waar u de naam van de waarschuwing, het type (SQL Server Event Alert in dit geval), het databasebereik en de waarschuwingsvoorwaarden opgeeft.

De eenvoudigste manier om een ​​voorwaarde op te geven, is door het ernstniveau te gebruiken. En om een ​​volledige lijst met foutmeldingen in SQL Server te krijgen, moet u sys.messages opvragen. Houd er rekening mee dat deze weergave 309408 rijen bevat, dus het gebruik van een filter is een goed idee. Daarom heb ik in mijn zoekopdracht gefilterd op Engels via een opdracht.


Afb. 1. Waarschuwingsknooppunt

-- Lijst 1:SQL Server-foutberichtengebruik msdbgoSELECT * FROM sys.messages waar taal_id=1033volgorde op ernst;

Fig. 2. Een SQL Server-gebeurteniswaarschuwing maken

Merk op dat ik ook een specifieke foutmelding kan gebruiken om een ​​waarschuwing te activeren. Zoals eerder vermeld, worden alle foutberichten weergegeven in de SQL Server-catalogusweergave sys.messages. Op het scherm van Fig. 2 heb ik alleen de gebeurtenisvoorwaarden geselecteerd - op de responspagina kon ik kiezen wat er gebeurt als deze gebeurtenis wordt vastgelegd. Zoals je kunt zien, kan ik ervoor kiezen om mijn reactie te automatiseren door een taak uit te voeren of gewoon operators op de hoogte te stellen. We zullen het uitvoeren van een taak later onderzoeken, maar laten we voor nu bekijken waarom een ​​Operator nodig is om door te gaan met de alternatieve optie. We zullen een operator in hetzelfde venster maken, maar als we bestaande operators hadden, hadden we ze eenvoudig uit de lijst kunnen selecteren.

Fig. 3. Een antwoord selecteren

Fig. 4. Een operator definiëren

Fig. 5. Het waarschuwingskanaal selecteren

In figuur 5 kiezen we E-mail als het medium voor het verzenden van meldingen. U moet Database Mail correct configureren, anders blijven de gegenereerde waarschuwingen in de wachtrij staan. Op de derde pagina van het New Alert-venster kunnen we kiezen of de foutmelding wordt opgenomen in de e-mailnotificatie en of we een extra bericht willen sturen (bijvoorbeeld de instructies naar een Junior DBA over verdere acties). We bepalen ook het interval tussen het afgaan van waarschuwingen. Het is belangrijk, want als je het op de standaard (0) laat staan, zal de mailbox van de telefoniste binnen een korte tijd vol met waarschuwingen zitten.


Fig .6. Opties configureren

-- Lijst 2:een SQL Server-waarschuwing maken met 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_responses 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', @notification_method =pre> 

Listing 2 toont de equivalente code voor het implementeren van deze waarschuwing. Zodra we het proces hebben voltooid door op OK te klikken, kunnen we zowel de waarschuwing als de operator in het SQL Server Agent-knooppunt in Objectverkenner bekijken.

Fig. 7. Alert aangemaakt

Een waarschuwing voor prestatiecondities voor SQL Server maken

We kunnen ook de alternatieve route volgen en een prestatieconditiewaarschuwing maken. Als voorbeeld kiezen we Databases> Teller gebruikt logboekpercentage. We vertellen SQL Server om een ​​gebeurtenis te genereren wanneer het gebruik van logbestanden de 75% overschrijdt. In dit geval kiezen we als antwoord ‘een klus uitvoeren’. Listing 3 toont de belangrijkste taken die door deze job worden uitgevoerd en Listing 4 toont de volledige definitie van de job.

Fig. 8. Prestatieconditiewaarschuwing

-- Lijst 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-- Lijst 4:Volledige definitie van SQL Agent-back-uptaakUSE [msdb]GO/****** Object :Job [DB1_BackupTransactionLog] Scriptdatum:27/11/2019 19:20:22 PM ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Object:JobCategory [[Niet gecategoriseerd (lokaal )]] Scriptdatum:27/11/2019 19: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'[Niet gecategoriseerd (lokaal)]'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'Maak een back-up van het transactielogboek voor DB1 wanneer het gebruik van het transactielogboek 75% overschrijdt',@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 /****** Object:Step [Backup_Transaction_Log] Script Datum:27/11/2019 19: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,@retry_attemptos_val_2,=,retry_prioriteit@ =0, @subsystem=N'TSQL',@command=N'-- Lijst 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/****** Object:Stap [DB1_Shrink_Transaction_Log_File] Scriptdatum:27/11/2019 19:20:23 PM ******/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, @subsystem=Ncommand =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 OF @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_job @server @server_name =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO

Fig. 9. Maak een taak naar de uitgevoerde

Aangezien onze reactie in dit geval de taakuitvoering is, nemen we ook een melding op in de taak zelf. Zodra we klaar zijn met het maken van de taak, kunnen we de waarschuwingseigenschappen in Object Explorer bekijken. We kunnen op de geschiedenispagina controleren hoe vaak de gebeurtenis heeft plaatsgevonden.

Fig. 10. Opties voor waarschuwing

Fig. 11. Waarschuwingsgeschiedenispagina

Conclusie

In dit artikel hebben we het maken van waarschuwingen en operators onderzocht. U kunt profiteren van deze krachtige mogelijkheid in SQL Server en uw omgeving instellen voor het bewaken van basisgebeurtenissen zonder een hulpprogramma van derden te kopen. De mogelijkheid om met jobs kleine problemen op te lossen helpt ons bij het proactief beheren van onze SQL Server-omgeving.


  1. Gegevens opmaken in Power BI Desktop-visualisaties

  2. SQL Natural Join

  3. MySQL draaitabelquery met dynamische kolommen

  4. ListView toont niet de juiste afbeeldingen die in de tekenbare staan ​​op basis van hun naam in sqlite