Eu tenho um trabalho de agente do servidor SQL 2012 que atualmente é executado a cada minuto, todos os dias, etc.
Gostaria de modificá-lo para que funcione a cada minuto, todos os dias, exceto aos sábados, entre 19h e 23h30. Isso é possível com o agendador de tarefas?
Tentei usar uma frequência diária e posso alterar a hora diariamente dessa forma, mas não para um dia específico.
Cronograma atual:
Não acho que você possa trabalhar com esse único trabalho para obter esse cronograma exato. Você pode querer considerar ter outro trabalho que desabilita/habilita o trabalho pelo período de tempo que você não deseja que ele seja executado. Outra solução seria adicionar outra lógica condicional ao seu trabalho existente e verificar o dia da semana atual e que horas são, e decidir se deve ou não executar a lógica do seu trabalho.
Algumas alternativas aqui, mas acho que você terá que ser criativo com sua programação relativamente complexa.
Evite o incômodo de criar outro trabalho que desative este trabalho, etc. Para manter as coisas simples:
Outra forma de ver esta questão é:
Esta é uma situação comum e a necessidade por trás disso é justificada para qualquer manutenção planejada. Espero que a MS implemente um cronograma mais robusto.
Você tem que criar 3 trabalhos semanais, 1 definido semanalmente para Dom-Sex das 12h às 23h59 e outros 2 para definir semanalmente para serem executados apenas no sábado, um para a manhã e outro para depois.
Eu também pesquisei a resposta para um problema semelhante e encontrei a solução aqui: SQL Server Agent Job - Agende diariamente, exceto 1 dia por mês.
Solução: Criei mais uma etapa do TSQL e a tornei a primeira a ser executada. Na nova etapa, adicione algo assim (altere a lógica DATEPART conforme necessário) :
Portanto, o que essa lógica de exemplo faz é que, se for sábado entre 19h e 23h30, cancela o trabalho (aparece no histórico como cancelado) .
NB! sp_stop_job reside em msdb, então escolha-o na etapa ou adicione-o ao TSQL.