Portanto, tenha um trabalho de ETL que seja executado por meio de serviços de integração que eu inicie com um nome de trabalho SQL StartStageStore. A última etapa deste trabalho é iniciar outro trabalho e relatar o sucesso. O trabalho para o qual isso chama é chamado de LoopStageStore. Tudo o que o LoopStageStore faz é executar um procedimento armazenado que reinicia o trabalho StartStageStore novamente desta forma, estamos constantemente puxando os dados de origem para o nosso sistema. Este trabalho está em execução há várias semanas sem falhas. Até as duas últimas noites eu comecei a receber este erro "Executado como usuário: AgentUser. SQLServerAgent Error: Request to run job Stage/Store AgentUser recusado porque o job já está sendo executado a partir de uma solicitação do User AgentUser. [SQLSTATE 42000] (Erro 22022) . A etapa falhou."
Isso não deve ser possível quando o trabalho de execução do StartStageStore for concluído e não estiver mais em execução quando o LoopStageStore for iniciado.
Aqui podemos ver a última etapa executada às 12:19:14.
E o próximo trabalho falha às 12:19:15 Dizendo que o StartStageStore está em execução no momento. Eu já tenho uma solução alternativa para isso, em que apenas lance um atraso no segundo trabalho. Eu só estou querendo saber se alguém sabe por que isso aconteceria.
BEGIN
WAITFOR DELAY '00:01';
EXECUTE dbo.LoopStageStore
END; GO
Tudo bem, então o problema que eu estava tendo era que o tempo de gravação no arquivo de log para conclusão do trabalho ocasionalmente leva mais tempo do que o necessário para executar o procedimento armazenado que reinicia esse loop.
A solução para isso é minha solução original.
Caso alguém queira usar aqui está o código.
Basta fazê-lo esperar um pouco.