En cas d’échec sur un job SQL ou quand un seuil de performance est atteint, il peut être utile de recevoir une alerte mail pour être proactif. Plus simplement, pour envoyer un mail depuis SQL Server, on utilisera la fonctionnalité Database Mail. Cela se fait en plusieurs étapes, transposables en T-SQL (télécharger le script) :
– Configuration d’un serveur SMTP
– Configuration de Database Mail
– Ajout d’un opérateur
– Configuration de l’agent SQL Server
– Rétention de Database Mail
Dans cette démo, on utilise un compte Gmail, on pourra donc s’affranchir de cette étape. Cela étant, en pratique, typiquement dans un environnement de PRODUCTION, on aura recours au service SMTP configuré au préalable sur la machine qui héberge notre instance SQL Server. La procédure est disponible en ligne :
https://msdn.microsoft.com/fr-fr/library/dn292550.aspx
Activer la fonctionnalité Database Mail au niveau de l’instance
1 2 3 4 5 6 7 8 |
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Database Mail XPs', 1; GO RECONFIGURE GO |
Clic droit sur Database Mail, cliquer sur Configure Database Mail
Sélectionner Set Up Database Mail
Renseigner le nom du profil, la description puis cliquer sur Add… pour y associer un compte mail.
Renseigner le nom du compte, l’adresse mail, le serveur SMTP, le port et l’authentification…
Dans le cas où l’on a recourt à un serveur SMTP interne, la création de compte sera plus proche de cette configuration :
Le compte Gmail est désormais associé au profil DBA.
Cocher l’option Public et sélectionner Yes dans la liste Default Profile.
Valider les paramètres système par défaut
Confirmer la configuration de Database Mail
La configuration est alors appliquée
Pour tester la configuration de Databse Mail, faire un clic droit sur Database Mail et cliquer sur Send Test E-Mail.
Renseigner le destinataire
Une fois le mail envoyé, pour consulter les logs et identifier une erreur éventuelle, faire un clic droit sur Database Mail et cliquer sur View Database Mail Log.
Clic droit sur le conteneur Operator et sélectionner l’option New Operator
Renseigner au minimum le nom et l’adresse mail de l’opérateur
Une fois qu’on a configuré Database Mail et ajouté au moins un opérateur, on active la fonctionnalité au niveau de l’agent SQL en activant le profil mail et l’opérateur créés précédemment.
En dernier lieu, on redémarre le service de l’agent SQL pour la prise d’effet, avec un délai de 5 secondes entre chaque opération.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-- STOP SQL Server Agent EXEC xp_servicecontrol N'STOP',N'SQLServerAGENT' GO WAITFOR DELAY '00:00:05' -- START SQL Server Agent EXEC xp_servicecontrol N'START',N'SQLServerAGENT' GO WAITFOR DELAY '00:00:05' -- CHECK SQL Server Agent Status EXEC xp_servicecontrol N'QUERYSTATE',N'SQLServerAGENT' GO |
Par la suite, pour être notifié par mail de l’état d’un job (succès, échec ou complet), il suffit de se rendre dans la section Notifications d’un job, cocher E-Mail et sélectionner l’opérateur :
Attention à la croissance de la base de données système msdb dans laquelle sont stockés la configuration mais aussi les logs et mails générés par Database Mail. Database Mail doit faire l’objet d’une purge régulière. Le cas échéant, la croissance de la base de données système msdb qui gère aussi les jobs de l’agent SQL sera affectée. Le script suivant permet de purger les données antérieurs à 30 jours. Reste à planifier son exécution.
1 2 3 4 |
DECLARE @DeleteBeforeDate DateTime SELECT @DeleteBeforeDate = DATEADD(d,-30, GETDATE()) EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @DeleteBeforeDate EXEC msdb.dbo.sysmail_delete_log_sp @logged_before = @DeleteBeforeDate |