Alertes de l'Agent SQL Server et erreurs de gravité
J'ai des alertes de configuration dans l' Agent SQL pour les erreurs de niveau de gravité 15-16 pour les tests, et a constaté que ceux - ci ne sont pas toujours déclenchées
Pour être plus précis, ceux - ci semblent déclencher que lorsque le numéro d'erreur donné est is_event_logged = 1ensys.messages
Cela signifie que lorsque les commandes ci-dessous sont exécutées:
create table -- Msg 102, Level 15, State 1 -- Incorrect syntax near 'table'
select 1/0 -- Msg 8134, Level 16, State 1 -- Divide by zero error encountered
Ces erreurs (102, 8134) ont is_event_logged = 0et ne sont pas écrites dans le journal de l'application -> les alertes pour les erreurs de gravité de niveau 15-16 ne se déclenchent pas
Lorsque j'essaie de générer une gravité d'erreur 15 ou 16, qui a is_event_logged = 1, les alertes se déclenchent très bien
raiserror(18054,16,1)
raiserror(15716,15,1)
Idem avec les erreurs de gravité 17-25, seules celles qui ont is_event_logged = 1, peuvent déclencher une alerte
Des questions:
Cela ne semble pas le niveau de gravité de l'erreur, mais en fait la
is_event_loggedcolonne contrôle si une erreur peut déclencher une alerte qui recherche des erreurs de niveau de gravité? Est-ce le comportement prévu dans SQL Server?Si je dois créer un message d'erreur personnalisé en tant qu'alerte pour une application, en utilisant la
sp_addmessageprocédure, et configurer ultérieurement une alerte pour ce message d'erreur, le paramètre @severity n'a pas vraiment d'importance, je dois utiliser le paramètre @with_log?Existe-t-il un moyen de faire TOUTES les erreurs de niveaux de gravité donnés (15, 16, 17-25) pour déclencher une alerte, indépendamment de is_event_logged égal à 1 ou 0? J'ai peur de manquer quelque chose d'important, car il y a beaucoup d'erreurs de gravité 17-25 qui ne sont pas enregistrées dans app.log -> ne pas déclencher d'e-mail d'alerte?
Réponses
Oui, cela fonctionne comme prévu.
En regardant les documents :
L'agent SQL Server lit le journal des applications et compare les événements qui y sont écrits aux alertes que vous avez définies.
Le mécanisme utilisé pour les alertes de l'agent SQL consiste à lire le journal. Ainsi, s'il n'est pas enregistré, il n'y a pas d'alerte.
Au lieu de cela, vous pouvez utiliser les événements étendus pour capturer les erreurs, même si elles ne sont pas enregistrées. Vous pouvez ensuite écrire votre propre processus pour lire le fichier d'événements étendus et envoyer des alertes si nécessaire.