Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Activer la messagerie de base de données dans SQL Server (T-SQL)

SQL Server dispose d'une option de messagerie de base de données que vous pouvez utiliser pour envoyer du courrier à partir du serveur de base de données.

Par exemple, vous pouvez recevoir des notifications lorsque les travaux de l'Agent SQL Server se terminent ou échouent, ou lorsqu'il y a une erreur très grave, etc.

Lorsque la messagerie de base de données n'est pas configurée

Dans SQL Server, le courrier est envoyé en exécutant le sp_send_dbmail procédure stockée dans msdb base de données.

Voici un exemple :

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Cependant, cela suppose que SQL Server est configuré pour envoyer du courrier.

Si vous essayez d'envoyer du courrier à partir de SQL Server, mais que vous obtenez une erreur comme celle-ci, cela signifie que la messagerie de base de données n'est pas activée pour le moment.

Msg 15281, Level 16, State 1, Procedure msdb.dbo.sp_send_dbmail, Line 0
SQL Server blocked access to procedure 'dbo.sp_send_dbmail' of component 'Database Mail XPs' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Database Mail XPs' by using sp_configure. For more information about enabling 'Database Mail XPs', search for 'Database Mail XPs' in SQL Server Books Online.

Activer les XP de messagerie de base de données

Avant de commencer à envoyer des e-mails à partir du serveur, vous devez vous assurer que les XP de la messagerie de base de données sont activés.

C'est assez facile à faire (bien que Microsoft recommande que les options avancées telles que celle-ci ne soient modifiées que par un administrateur de base de données expérimenté ou un technicien SQL Server certifié).

Voici comment activer les XP de la messagerie de base de données :

EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO

Résultat :

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Commands completed successfully.
Commands completed successfully.

Créer un compte de messagerie, un profil, etc.

La messagerie de base de données est envoyée via un profil, plutôt que directement via un compte d'utilisateur.

Pour envoyer un e-mail avec la messagerie de base de données, vous devez créer un compte de messagerie de base de données, un profil de messagerie de base de données, ajouter le compte au profil, puis accorder à un utilisateur l'accès à ce profil. L'utilisateur doit être sur le msdb base de données.

Le code T-SQL pour ce faire pourrait ressembler à ceci :

-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Vous devrez remplacer les différents détails par les vôtres. Cela suppose également que vous spécifiez un serveur de messagerie qui fonctionne.

Une fois que vous avez fait cela, vous devriez pouvoir envoyer du courrier avec le msdb.dbo.sp_send_dbmail procédure stockée.