Résoudre les problèmes liés aux procédures stockées d’activation

S’applique à :SQL ServerAzure SQL Managed Instance

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 : Analyser la configuration de Service Broker

Si les procédures stockées activées ne s’exécutent pas correctement, utilisez l’utilitaire ssbdiagnose pour rechercher des erreurs de configuration dans les services associés. Pour plus d’informations, consultez l’utilitaire ssbdiagnose (Service Broker).

Technique : Afficher la sortie de procédure stockée d’activation

Si la procédure stockée activée génère des résultats incorrects ou ne lit pas à partir de la file d'attente, vérifiez le journal des erreurs et les messages de SQL Server pour localiser 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 placées dans le journal des erreurs SQL Server. Cela inclut les erreurs, les messages et la sortie des déclarations PRINT et RAISERROR.

Technique : Exécuter 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 sur 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 le contexte d’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 sys.service_queues catalogue pour confirmer les paramètres de la file d’attente. 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 le principal de sécurité correct. Contrôlez que le principal 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 restent dans la file d’attente

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

  • Vérifiez la vue sys.dm_broker_queue_monitors de gestion dynamique pour vous assurer qu’un moniteur de file d’attente est actif pour la file d’attente. Si ce n’est pas le cas, utilisez l’instruction ALTER QUEUE pour activer ON.

  • L’état du moniteur de file d’attente pour la file d’attente doit être RECEIVES_OCCURRING. Si le moniteur de file d’attente n’est pas dans cet état, vérifiez la vue sys.dm_broker_activated_tasks de gestion dynamique pour vous assurer que les tâches activées pour la file d’attente sont en cours d’exécution. 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 restent dans la file d’attente, la tâche échoue RECEIVE ou ne valide pas 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.