Compartilhar via


Solucione problemas de processos armazenados de ativação

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

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: 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 o utilitário ssbdiagnose (Service Broker).

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

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

Técnica: executar 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 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ê poderá 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 pelo Mecanismo de Banco de Dados. Antes de você executar o procedimento, faça o seguinte:

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

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

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

Sintoma: os 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. A exibição do sys.service_queues catálogo é usada 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 do SQL Server quanto a erros do procedimento armazenado. Você pode também executar o procedimento armazenado a partir do 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 visão de gerenciamento dinâmico sys.dm_broker_queue_monitors para garantir que um monitor de fila esteja ativo para a fila. Caso contrário, use a ALTER QUEUE instrução para ativar ON.

  • O estado do monitor da fila deve ser RECEIVES_OCCURRING. Se o monitor de fila não estiver nesse estado, verifique o modo de exibição de gerenciamento sys.dm_broker_activated_tasks 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 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 em execução, mas as mensagens permanecerem na fila, a tarefa pode falhar na RECEIVE ou na confirmação de transações. Verifique o log de erros do SQL Server quanto a erros do procedimento armazenado. Interromper a ativação e executar o procedimento armazenado manualmente pode ajudar a solucionar o problema.