Résolution des problèmes liés aux procédures stockées d'activation

Les procédures stockées d'activation s'exécutent lors d'une session d'arrière-plan. Par conséquent, les solutions permettant de résoudre les problèmes de procédures stockées d'activation diffèrent légèrement de celles utilisées pour les procédures stockées qui sont intégrées à une session interactive.

Technique : affichage de la sortie de la procédure stockée d'activation

Le Moteur de base de données écrit la sortie d'une procédure stockée activée dans le journal d'erreurs SQL Server. Si cette procédure produit des résultats incorrects ou si sa lecture de la file d'attente échoue, consultez le journal d'erreurs SQL Server pour prendre connaissance de la sortie de cette procédure. Les informations qui y sont fournies sont souvent suffisantes pour localiser le problème.

Technique : exécution de la procédure stockée à partir d'une session interactive

Une des meilleures façons de résoudre un problème de procédure stockée d'activation consiste à désactiver l'activation sur la file d'attente, puis à exécuter la procédure stockée depuis SQL Server Management Studio (ou l'utilitaire sqlcmd). L'exécution de cette procédure à partir d'une session interactive vous permet d'afficher toutes les erreurs qui sont retournées par la procédure stockée.

Cependant, lorsqu'une procédure stockée est activée par le Moteur de base de données, le contexte de sécurité et les paramètres de la base de données peuvent être différents. Avant d'exécuter la procédure, utilisez EXECUTE AS pour définir l'utilisateur de la session sur l'utilisateur spécifié pour l'activation et paramétrer les options de la session avec les valeurs par défaut de la base de données.

Pour plus d'informations, consultez Internal Activation Context.

Symptôme : les procédures stockées d'activation ne s'exécutent pas

Plusieurs causes banales peuvent être à l'origine de ce symptôme.

Les paramètres de la file d'attente ont peut-être été modifiés. Utilisez l'affichage catalogue sys.service_queues pour contrôler ces paramètres. Vérifiez plus particulièrement l'activation de la file d'attente, qui doit être activée, ainsi que la file d'attente, qui doit spécifier la procédure stockée appropriée avec l'entité de sécurité correcte. Contrôlez également l'entité de sécurité, elle doit disposer de l'autorisation d'exécution sur la procédure stockée.

La procédure stockée peut ne pas pouvoir démarrer ou se fermer immédiatement après le démarrage. Dans ce cas, vérifiez le journal d'erreurs SQL Server à la recherche d'éventuelles erreurs provenant de cette procédure. Vous pouvez également exécuter la procédure stockée à partir de SQL Server Management Studio et vérifier les résultats.

Symptôme : les messages demeurent dans la file d'attente

Assurez-vous que les procédures stockées d'activation ont démarré correctement :

  • Vérifiez la vue de gestion dynamique sys.dm_broker_queue_monitors pour vous assurer qu'un moniteur de file d'attente est actif pour la file. Si ce n'est pas le cas, l'activation est désactivée (OFF) pour cette file d'attente. Utilisez l'instruction ALTER QUEUE pour activer (ON) cette fonction.
  • L'état du moniteur de la file d'attente doit être RECEIVES_OCCURRING. S'il affiche un autre état, vérifiez la vue de gestion dynamique sys.dm_broker_activated_tasks pour contrôler l'exécution en cours des tâches activées pour la file d'attente. Si aucune n'est présente, l'activation est en échec. Voir « Symptôme : les procédures stockées d'activation ne s'exécutent pas » dans cette section.

Si les tâches activées sont en cours d'exécution, mais que les messages demeurent dans la file d'attente, la tâche se trouve dans l'impossibilité de recevoir (RECEIVE) ou de valider des transactions. Vérifiez le journal d'erreurs SQL Server à la recherche d'éventuelles erreurs provenant de cette procédure. Arrêter l'activation pour exécuter la procédure stockée manuellement peut permettre de résoudre le problème.

Voir aussi

Autres ressources

sys.service_queues (Transact-SQL)
sys.dm_broker_queue_monitors
sys.dm_broker_activated_tasks

Aide et Informations

Assistance sur SQL Server 2005