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 pour dépanner une procédure stockée d'activation diffère légèrement de celles utilisées pour les procédures stockées intégrées à une session interactive.

Technique : analyse de la configuration de Service Broker

Si les procédures stockées activées ne s'exécutent pas avec succès, utilisez l'utilitaire ssbdiagnose pour rechercher les erreurs de configuration dans les services associés. Pour plus d'informations, consultez Utilitaire ssbdiagnose.

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

Si la procédure stockée activée produit des résultats incorrects, ou ne peut lire à partir de la file d'attente, consultez le journal des erreurs SQL Server pour rechercher les erreurs et les messages qui aident à identifier le problème. Les procédures stockées activées ne sont associées à aucune application. Les informations retournées normalement à l'application appelante sont mises à la place dans le journal des erreurs SQL Server. Ces informations incluent les erreurs, les messages et la sortie des instructions PRINT et RAISERROR.

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

Pour résoudre un problème de procédure stockée d'activation, vous pouvez 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.

Toutefois, vous pouvez obtenir des résultats différents si le contexte de sécurité et les paramètres de base de données sont différents dans la session interactive et lorsque la procédure stockée est activée par le Moteur de base de données. Avant d'exécuter la procédure, procédez comme suit :

  • Utilisez EXECUTE AS pour définir l'utilisateur de la session interactive comme l'utilisateur spécifié pour l'activation.

  • Définissez les options pour la session sur la base de données par défaut.

Pour plus d'informations, consultez Contexte de l'activation interne.

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

Les causes suivantes sont généralement à 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 que l'activation de la file d'attente est effective, que la file d'attente spécifie la procédure stockée appropriée et que la file d'attente spécifie l'entité de sécurité correcte. Contrôlez que l'entité de sécurité dispose des autorisations d'exécution sur la procédure stockée.

  • La procédure stockée ne peut pas démarrer ou peut s'arrêter immédiatement après avoir démarré. 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. Sinon, utilisez l'instruction ALTER QUEUE pour activer l'activation.

  • 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 tâche n'est activée, l'activation échoue. Pour plus d'informations, consultez la section « Symptôme : les Procédures stockées d'activation ne s'exécutent pas » plus haut dans cette rubrique.

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 les 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.