Présentation
Avec toutes les avancées de SQL Server et des données, il est bon que des outils SQL natifs tels que les alertes et les opérateurs soient toujours disponibles. Ce sont les principales fonctionnalités de l'Agent SQL Server qui sont liées à tout ce qui concerne l'automatisation de SQL Server.
Leurs rôles sont clairs :
- Les alertes, lorsqu'elles sont configurées, permettent aux administrateurs de base de données de savoir quand un événement spécifié s'est produit.
- Un opérateur est un objet défini dans SQL Server qui mappe toute personne ou un groupe pouvant recevoir des notifications lorsque ces événements se produisent.
Types d'événements
SQL Server enregistre les événements dans le journal des applications Windows - nous pouvons y accéder via l'Observateur d'événements Windows au niveau du système d'exploitation. L'Agent SQL Server peut lire le journal des applications et déclencher des alertes lorsqu'il existe une correspondance entre 2 catégories de choses :1) les événements enregistrés dans le journal des applications 2) une alerte définie par un administrateur.
Il existe trois principaux types d'événements :
- Événements SQL Server
- Conditions de performances de SQL Server
- Événements WMI
Création d'un événement SQL Server
Nous commençons à créer une alerte SQL Server Agent en cliquant avec le bouton droit sur le nœud Alertes dans l'explorateur d'objets sous SQL Server Agent. Cela ouvre la fenêtre illustrée à la Fig. 2 où vous spécifiez le nom de l'alerte, son type (alerte d'événement SQL Server dans ce cas), la portée de la base de données et les conditions d'alerte.
Le moyen le plus simple de spécifier une condition consiste à utiliser le niveau de gravité. Et pour obtenir une liste complète des messages d'erreur dans SQL Server, vous devez interroger sys.messages. Notez que cette vue contient 309408 lignes, donc utiliser un filtre est une excellente idée - c'est pourquoi dans ma requête, j'ai filtré pour l'anglais via la commande.
Fig. 1. Nœud d'alertes
-- Liste 1 : Messages d'erreur de SQL Server, utilisez msdbgoSELECT * FROM sys.messages where language_id=1033order par gravité ;
Fig. 2. Création d'une alerte d'événement SQL Server
Notez que je pourrais également utiliser un message d'erreur spécifique pour déclencher une alerte. Comme mentionné précédemment, tous les messages d'erreur sont répertoriés dans la vue de catalogue SQL Server sys.messages. Sur l'écran de la Fig. 2, j'ai simplement sélectionné les conditions de l'événement - la page de réponse m'a permis de choisir ce qui se passe si cet événement est capturé. Comme vous pouvez le voir, je peux soit choisir d'automatiser ma réponse en exécutant une tâche, soit simplement avertir les opérateurs. Nous explorerons l'exécution d'une tâche plus tard, mais pour l'instant, observons pourquoi un opérateur est nécessaire pour continuer avec l'option alternative. Nous allons créer un opérateur dans la même fenêtre, mais si nous avions des opérateurs existants, nous aurions pu simplement les sélectionner dans la liste.
Fig. 3. Sélectionner une réponse
Fig. 4. Définition d'un opérateur
Fig. 5. Sélection du canal d'alerte
Dans la figure 5, nous choisissons le courrier électronique comme moyen d'envoi des notifications. Vous devez configurer correctement la messagerie de base de données, sinon les alertes générées resteront dans la file d'attente. Sur la troisième page de la fenêtre Nouvelle alerte, nous pouvons choisir si le message d'erreur est inclus dans la notification par e-mail et si nous voulons envoyer un message supplémentaire (par exemple, les instructions à un Junior DBA concernant d'autres actions). Nous déterminons également l'intervalle entre les alertes déclenchées. C'est important car si vous le laissez par défaut (0), la boîte aux lettres de l'opérateur sera pleine d'alertes dans un court laps de temps.
Fig .6. Options de configuration
-- Liste 2 :Création d'une alerte SQL Server à l'aide de 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 =1GO_method =1GO pré>Le Listing 2 montre le code équivalent pour implémenter cette alerte. Une fois le processus terminé en cliquant sur OK, nous pourrons afficher à la fois l'alerte et l'opérateur dans le nœud SQL Server Agent dans l'Explorateur d'objets.
Fig. 7. Alerte créée
Création d'une alerte de condition de performance SQL Server
Nous pouvons également suivre l'itinéraire alternatif et créer une alerte de condition de performance. Par exemple, nous choisissons Bases de données> Compteur de pourcentage d'utilisation du journal. Nous demandons à SQL Server de générer un événement lorsque l'utilisation du fichier journal dépasse 75 %. Dans ce cas, nous choisissons « pour exécuter un travail » comme réponse. Le Listing 3 montre les principales tâches effectuées par ce travail et le Listing 4 montre la définition complète du travail.
Fig. 8. Alerte de condition de performance
-- Liste 3 :Messages d'erreur SQL ServerBACKUP 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-- Liste 4 :Définition complète de l'objet SQL Agent Backup JobUSE [msdb]GO/****** :Job [DB1_BackupTransactionLog] Date du script :27/11/2019 19:20:22 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objet :JobCategory [[Non catégorisé (Local )]] Date du script :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'[Non catégorisé (Local)]'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'Sauvegarder le journal des transactions pour DB1 lorsque l'utilisation du journal des transactions dépasse 75 %',@category_name=N' [Non classé (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 /****** Objet :Étape [Backup_Transaction_Log] Date du script :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,@retry_attempts=2,@retry_interval=15,@os_run_priority =0, @subsystem=N'TSQL',@command=N'-- Liste 3 :Messages d'erreur SQL ServerBACKUP 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/****** Objet :étape [DB1_Shrink_Transaction_Log_File] Date du script :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, @subsystem=N'TSQL',@command =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 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_jobserver @job_id =@jobId, @nom_serveur =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tAvecRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO
Fig. 9. Créer une tâche à exécuter
Étant donné que notre réponse, dans ce cas, est l'exécution du travail, nous incluons également une notification dans le travail lui-même. Une fois la création de la tâche terminée, nous pouvons examiner les propriétés d'alerte dans l'Explorateur d'objets. Nous pouvons vérifier dans la page d'historique combien de fois l'événement s'est produit.
Fig. 10. Options d'alerte
Fig. 11. Page Historique des alertes
Conclusion
Dans cet article, nous avons exploré la création d'alertes et d'opérateurs. Vous pouvez tirer parti de cette fonctionnalité puissante de SQL Server et configurer votre environnement pour surveiller les événements de base sans acheter d'outil tiers. La possibilité d'utiliser des travaux pour corriger des problèmes mineurs nous aide à réaliser une gestion proactive de notre environnement SQL Server.