Solucionar problemas de procedimentos de ativação armazenados

Aplica-se a:SQL ServerAzure SQL Managed Instance

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

Técnica: Analisar a configuração do Service Broker

Se os procedimentos armazenados ativados não forem executados com êxito, use o utilitário ssbdiagnose para procurar erros de configuração nos serviços associados. Para obter mais informações, consulte utilitário ssbdiagnose (Service Broker).

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

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

Técnica: Executar o procedimento armazenado a partir de uma sessão interativa

Para solucionar problemas de um procedimento armazenado de ativação, você pode desativar a ativação na fila e executar o procedimento armazenado no SQL Server Management Studio ou no utilitário sqlcmd . Se você executar o procedimento armazenado a partir de uma sessão interativa, poderá ver todos os erros retornados pelo procedimento armazenado.

No entanto, você poderá ver resultados diferentes se o contexto de segurança e as configurações do banco de dados forem diferentes na sessão interativa do que quando o procedimento armazenado for ativado pelo Mecanismo de Banco de Dados. Antes de executar o procedimento, faça o seguinte:

  • Use EXECUTE AS para definir o utilizador da sessão interativa como o especificado para a ativação.

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

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

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

A seguir estão as causas comuns deste sintoma:

  • As configurações da fila podem ter sido alteradas. Use a exibição de sys.service_queues catálogo para confirmar as configurações da fila. Verifique se a ativação para a fila está habilitada, se a fila especifica o procedimento armazenado correto e se a fila especifica a entidade de segurança correta. Confirme se a entidade de segurança tem permissões Executar no procedimento armazenado.

  • O procedimento armazenado pode não ser iniciado ou pode sair imediatamente após ser iniciado. Nesse caso, verifique se há erros do procedimento armazenado no log de erros do SQL Server. Você também pode executar o procedimento armazenado do SQL Server Management Studio e verificar os resultados.

Sintoma: As mensagens permanecem na fila

Verifique se os procedimentos armazenados de ativação foram iniciados corretamente:

  • Verifique a vista sys.dm_broker_queue_monitors de gestão dinâmica para garantir que um monitor de fila esteja ativo para a fila. Caso contrário, use a instrução ALTER QUEUE para ativar ON.

  • O estado do monitor da fila deve ser RECEIVES_OCCURRING. Se o monitor de fila não estiver nesse estado, verifique a exibição sys.dm_broker_activated_tasks de gerenciamento dinâmico para garantir que as tarefas ativadas para a fila estejam em execução no momento. Se não houver tarefas ativadas, a ativação está falhando. Para obter mais informações, consulte a seção "Sintoma: procedimentos armazenados de ativação não são executados" anteriormente neste tópico.

Se as tarefas ativadas estiverem em execução, mas as mensagens permanecerem na fila, é provável que a tarefa ou falhe ao RECEIVE ou ao confirmar transações. Verifique se há erros do procedimento armazenado no log de erros do SQL Server. Interromper a ativação e executar o procedimento armazenado manualmente pode ajudar a solucionar o problema.