Dépannage de la messagerie de base de données : courrier en file d'attente, aucune entrée dans sysmail_event_log ou dans le journal des événements des applications Windows

Cette rubrique décrit comment résoudre un problème lorsque des messages électroniques sont mis en file d'attente mais qu'aucune activité du programme externe n'apparaît dans la vue sysmail_event_log ni dans le journal d'événements des applications Windows.

La messagerie de base de données s'appuie sur Service Broker pour mettre en file d'attente les messages électroniques. Si la messagerie de base de données est arrêtée ou si la remise de message Service Broker n'est pas activée dans la base de données msdb, la messagerie de base de données met en file d'attente la base de données de messages 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'activant pas le programme externe, il n'existe 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 la messagerie de base de données est bien activée :

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 ce problème, activez Service Broker dans la base de données. Pour obtenir des informations sur l'activation de la remise de message Service Broker, consultez Procédure : activer la remise de messages Service Broker dans les bases de données (Transact-SQL).

La messagerie de base de données est basée sur un certain nombre de procédures stockées internes. Pour réduire la zone de surface, ces procédures stockées sont désactivées lors de la 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.

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 la messagerie de base de données 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 lorsqu'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. La messagerie de base de données 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 que la messagerie de base de données utilise, consultez sysmail_configure_sp (Transact-SQL).