Às vezes, vejo algumas inconsistências com o valor do SQL Server Agent nos campos sysjobschedules.next_run_date e time.
Eu tenho uma interface web que interage com o sistema de agendamento sql.
Criei um trabalho de teste que começou em 16 de março de 2011 às 9h45. Eu configurei para acontecer a cada 4 semanas em uma quarta-feira.
A partir de hoje, isso deve colocar a próxima data e hora de execução em 18 de janeiro às 9h45, mas o valor da próxima data/hora de execução para o meu trabalho é 4 de janeiro.
Os valores nas propriedades do trabalho parecem bons.
A data de início diz 16 de março de 2011.
Os valores de frequência estão todos corretos.
Mas parece que o SQL está falhando em conseguir essa ocorrência corretamente.
Aqui estão algumas informações relevantes para o trabalho em questão do sp_help_jobschedule proc
freq_type 8
freq_interval 8
freq_subday_type 1
freq_subday_interval 1
freq_relative_interval 0
freq_recurrence_factor 4
active_start_date 20110316
active_end_date 99991231
active_start_time 154500
active_end_time 55959
date_created 2011-12-29 20:37:05.737
schedule_description Every 4 week(s) on Wednesday at 154500
next_run_date 20120104
next_run_time 154500
se a data de início for 16 de março de 2011 às 9h45, não faz sentido que a próxima data de execução caia em 4 de janeiro de 2012 com base nas propriedades do trabalho.
Acho que minha pergunta é: quanto posso confiar nesses dados da próxima data de execução?
Quando você verificou esses dados? A
msdb.dbo.sysjobschedules
tabela é atualizada a cada 20 minutos. Portanto, se você o definiu e depois o alterou e, em seguida, executou osp_help_jobschedule
procedimento armazenado, os dados subjacentes podem não ter sido atualizados ainda.O que você obtém para next_scheduled_run_date ao executar esta consulta?
Com base na data de início ativo em 16 de março de 2011, em janeiro de 2012, esperamos que uma ocorrência programada chegue na quarta-feira, 18 de janeiro.
Se a data de modificação desse planejamento se tornar maior que a data de início ativa, o SQL parecerá usar a data de modificação como ponto de partida para determinar a próxima quarta-feira para iniciar a sequência de 4 semanas.
Se uma atualização estiver ocorrendo na terça-feira, 10 de janeiro, a próxima data de execução será quarta-feira, 11 de janeiro e todas as quartas-feiras subsequentes, 4 semanas a partir daí, agora será relativa a 11 de janeiro, que agora omite 18 de janeiro da sequência original.
A data de início ativa parece não ter mais relevância para o servidor SQL ao calcular a próxima data de execução.
Ele simplesmente escolherá o dia seguinte no futuro, a partir da data modificada, que corresponda ao dia da semana solicitado; neste caso, na próxima quarta-feira.
Esta consulta pode ser útil, para obter detalhes do histórico, você pode participar
msdb.dbo.sysjobhistory
O
Next Run
(s) campo(s) no meu Monitor de Atividade de Trabalho não estavam de acordo com o(s) que foi obviamente configurado(s) no Agendamento de Trabalho.No meu caso, descobri que o
SQL Server Agent
serviço não estava funcionando (por algum motivo). Iniciei o serviço e atualizei o Job Activity Monitor, e os dados agora são precisos.msdb.dbo.sp_help_job
sempre aparece para retornar onext_run_date
/ real corretonext_run_time
.Ele usa
sp_get_composite_job_info
, que faz a seguinte chamada para realmente recuperar onext_run_date
/next_run_time
:Como
sysjobschedule
parece não ser confiável, basta usarsp_help_job
.Se você precisar manipular os valores retornados, pode usar o
openrowset
truque: