Estou usando o SQL Agent para agendar a execução de um procedimento.
A primeira vez que o procedimento é executado, ele roda sem problemas. Na segunda vez que o trabalho (etapa) é executado, ele não termina.
Uma variação da seguinte instrução SQL me diz que a instrução em execução é create procedure xyz...
(onde xyz
é o nome do procedimento que o trabalho deve executar).
select
prc.loginame,
prc.program_name,
sql.text sql_text
from
sys.sysprocesses prc cross apply
sys.dm_exec_sql_text(prc.sql_handle) sql
Eu não faço nenhum DDL no meu procedimento (ou de outra forma) e estou querendo saber o que faz com que o trabalho tente criar o procedimento e por que o trabalho trava?
Ver a instrução create do procedimento aparecendo é um comportamento esperado aqui, não tem nada a ver com o próprio agente de trabalho. E a etapa de trabalho não é recriar o procedimento, é apenas executá-lo.
Exemplo
Se eu criar este procedimento:
E, em seguida, execute-o em uma janela de consulta:
Em seguida, execute sua consulta:
O proc de criação também aparece.
Se você quiser mais informações sobre a chamada de procedimento, você pode usar algo como
dbcc inputbuffer
Para mim isso retorna:
Ou execute sp_whoisactive com o parâmetro
@get_outer_command
definido como 1.Exemplo de resultado:
executar sp_whoisactive também pode fornecer mais informações sobre em qual parte seu procedimento está travado.
A parte do procedimento de criação é esclarecida, o problema real da interrupção do trabalho será adivinhação sem ter um exemplo reproduzível ou mais informações.
O trabalho está executando uma consulta? A detecção de parâmetros pode ser um problema aqui?
Quais são os tipos de espera ao executar o trabalho? Qual é a quantidade de tempo de CPU / leituras?
A execução da consulta abaixo (sua adaptada) quando o jobstep está travado pode fornecer mais informações:
Precisaríamos de mais detalhes para saber qual é o problema real.