Erreurs courantes avec la messagerie de base de données

S’applique à :SQL ServerAzure SQL Managed Instance

Cet article décrit certaines erreurs courantes rencontrées avec la messagerie de base de données, et leurs solutions.

la procédure stockée « sp_send_dbmail » est introuvable

La procédure stockée sp_send_dbmail est installée dans la base de données msdb. Vous devez exécuter sp_send_dbmail à partir de la base de données msdb ou spécifier un nom en trois parties pour la procédure stockée.

Exemple :

EXEC msdb.dbo.sp_send_dbmail ...

Ou :

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Utilisez l’Assistant Configuration de Database Mail pour activer et configurer la messagerie de base de données.

profil incorrect

Ce message peut s'afficher pour deux raisons. Le profil spécifié n’existe pas ou l’utilisateur qui exécute sp_send_dbmail (Transact-SQL) n’a pas l’autorisation d’accéder au profil.

Pour vérifier les autorisations pour un profil, exécutez la procédure stockée sysmail_help_principalprofile_sp (Transact-SQL) avec le nom du profil. Utilisez la procédure stockée sysmail_add_principalprofile_sp (Transact-SQL) ou l’Assistant Configuration de Database Mail pour accorder l’autorisation à un groupe ou un utilisateur de msdb d’accéder à un profil.

autorisation refusée sur la procédure sp_send_dbmail

Cette rubrique décrit le dépannage suite à un message d’erreur indiquant que l’utilisateur qui essaie d’envoyer des messages à l’aide de Database Mail n’est pas autorisé à exécuter la procédure sp_send_dbmail.

Le texte du message d'erreur est le suivant :

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Pour envoyer des messages à partir de Database Mail, l’utilisateur doit être un utilisateur de la base de données msdb et un membre du rôle de base de données DatabaseMailUserRole dans la base de données msdb. Pour ajouter des utilisateurs ou groupes msdb à ce rôle, utilisez SQL Server Management Studio ou exécutez l’instruction suivante pour l’utilisateur ou le rôle que vous voulez autoriser à envoyer des messages à partir de Database Mail.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Pour plus d’informations, consultez sp_addrolemember et sp_droprolemember.

Courrier en file d’attente, aucune entrée dans sysmail_event_log ou dans le journal des événements des applications Windows

Database Mail s’appuie sur Service Broker pour mettre les e-mails en file d’attente. Si Database Mail est arrêté ou si la remise de message Service Broker n’est pas activée dans la base de données msdb, Database Mail met en file d’attente les messages dans la base de données mais ne peut pas remettre les messages. Dans ce cas, les messages Service Broker restent dans la file d’attente de messagerie Service Broker. Service Broker n’active pas le programme externe ; il n’existe donc aucune entrée du journal dans sysmail_event_log et l’état de l’élément n’est pas mis à jour dans sysmail_allitems ni dans les vues associées.

Exécutez l’instruction suivante pour vérifier si Service Broker est activé dans la base de données msdb :

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Une valeur 0 indique que la remise de message Service Broker n’est pas activée dans la base de données msdb. Pour résoudre le problème, activez Service Broker dans la base de données avec la commande Transact-SQL suivante :

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

La messagerie de base de données est basée sur un certain nombre de procédures stockées internes. Pour réduire la surface d’exposition, ces procédures stockées sont désactivées lors d’une nouvelle installation de SQL Server. Pour activer ces procédures stockées, utilisez l’option Database Mail XPs de la procédure stockée système sp_configure, comme dans l’exemple suivant :

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

La messagerie de base de données peut être arrêtée dans la base de données msdb . Pour vérifier l’état de la messagerie de base de données, exécutez l’instruction suivante :

EXECUTE dbo.sysmail_help_status_sp;

Pour démarrer Database Mail dans une base de données hôte de messagerie, exécutez la commande suivante dans la base de données msdb :

EXECUTE dbo.sysmail_start_sp;

Service Broker examine la durée de vie de la boîte de dialogue pour les messages quand elle est activée ; par conséquent, les messages ayant figuré dans la file d’attente de transmission Service Broker pour une durée supérieure à la durée de vie de la boîte de dialogue configurée échouent immédiatement. Database Mail met à jour l’état des messages qui ont échoué dans sysmail_allitems et les vues associées. Vous devez déterminer si vous voulez envoyer de nouveau les messages électroniques. Pour plus d’informations sur la configuration de la durée de vie de la boîte de dialogue utilisée par Database Mail, consultez sysmail_configure_sp (Transact-SQL).

Voir aussi