Solucionando problemas de procedimentos armazenados de ativação

Os procedimentos armazenados ativados são executados em uma sessão em segundo plano. Portanto, as técnicas de solução de problemas de um procedimento armazenado de ativação diferem ligeiramente das usadas para solucionar problemas de procedimentos armazenados que sejam parte de uma sessão interativa.

Técnica: analisando a configuração do Agente de Serviços

Se os procedimentos armazenados não forem executados com sucesso, use o utilitário ssbdiagnose para procurar erros de configuração nos serviços associados. Para obter mais informações, consulte Utilitário ssbdiagnose.

Técnica: exibindo a saída do procedimento armazenado de ativação

Se o procedimento armazenado ativado produzir resultados incorretos ou não ler a fila, verifique o log de erros SQL Server quanto a erros e mensagens que ajudam a localizar o problema. Os procedimentos armazenados ativados não estão associados a qualquer aplicativo. As informações normalmente retornadas ao aplicativo de chamada são colocadas no log de erros SQL Server. Isso inclui erros, mensagens e a saída das instruções PRINT e RAISERROR.

Técnica: executando o procedimento armazenado de uma sessão interativa

Para solucionar problemas de um procedimento armazenado de ativação, você pode desligar a ativação na fila e, então, executar o procedimento armazenado a partir do SQL Server Management Studio ou do utilitário sqlcmd. Se você executar o procedimento armazenado a partir de uma sessão interativa, você poderá visualizar quaisquer erros retornados pelo procedimento armazenado.

Entretanto, você pode visualizar resultados diferentes se o contexto de segurança e as configurações de banco de dados forem diferentes na sessão interativa e quando o procedimento armazenado for ativado por Mecanismo de Banco de Dados. Antes de você executar o procedimento, faça o seguinte:

  • Use EXECUTE AS para definir o usuário para a sessão interativa como o usuário especificado para a ativação.

  • Defina as opções para a sessão como os padrões do banco de dados.

Para obter mais informações, consulte Contexto de ativação interna.

Sintoma: procedimentos armazenados de ativação não são executados

A seguir estão as causas comuns desse sintoma:

  • As configurações da fila podem ter sido alteradas. Use a exibição do catálogo sys.service_queues para confirmar as configurações da fila. Assegure-se de que a ativação da fila tenha sido habilitada, que a fila especifica o procedimento armazenado correto e que a fila especifica o principal de segurança correto. Confirme se o principal de segurança tem as permissões Execute no procedimento armazenado.

  • O procedimento armazenado pode não iniciar ou pode ser encerrado imediatamente depois de iniciar. Nesse caso, verifique o log de erros SQL Server quanto a erros do procedimento armazenado. Você pode também executar o procedimento armazenado a partir de SQL Server Management Studio e verificar os resultados.

Sintoma: as mensagens permanecem na fila

Certifique-se de que os procedimentos armazenados de ativação foram iniciados corretamente:

  • Verifique a exibição de gerenciamento dinâmico sys.dm_broker_queue_monitors para assegurar que um monitor de fila está ativo para a fila. Se não, use a instrução ALTER QUEUE para tornar a ativação ON.

  • O estado do monitor de fila para a fila deve ser RECEIVES_OCCURRING. Se o monitor de fila não estiver nesse estado, verifique a exibição de gerenciamento dinâmico sys.dm_broker_queue_monitors para assegurar que as tarefas ativadas para a fila estão sendo executadas atualmente. Se não houver tarefas ativadas, a ativação estará falhando. Para obter mais informações, consulte "Sintoma: procedimentos armazenados de ativação não são executados" anteriormente neste tópico.

Se as tarefas ativadas estiverem sendo executadas, mas as mensagens permanecerem na fila, a tarefa está falhando quando a RECEIVE ou falhando em relação a confirmar transações. Verifique o log de erros de SQL Server quanto a erros provenientes do procedimento armazenado. Interromper a ativação e executar o procedimento armazenado manualmente pode ajudar a solucionar o problema.