Eu tenho um trabalho que inicio manualmente em períodos de tempo coordenados que faz um monte de trabalho pesado ( principalmente restaurando backups e configurando para um servidor diferente )
Há vários trabalhos programados para serem executados com incrementos de minutos a dias. Eu quero "desligar" o agendador para que nada seja executado dentro do cronograma até que meu trabalho manual seja concluído. Percebo que os trabalhos perdidos não serão executados novamente até o próximo horário agendado, depois que o agendador for reiniciado.
- Primeiro passo: parar o agendador
- Várias etapas de levantamento pesado: faça o trabalho duro
- Último passo: iniciar agendador
Encontrei um comando Oracle , mas sou 100% Microsoft SQL Server
Eu sei que se eu desligar o agente SQL, os trabalhos não serão executados, mas não é isso que estou procurando.
Os empregos que existem hoje, não devem ser os mesmos empregos da próxima vez. Desabilitar trabalhos com EXEC dbo.sp_update_job não é uma solução viável.
Informações adicionais: Também pode haver trabalhos em vigor que foram desativados intencionalmente por algum motivo e que desejam ser reativados. Parar o agendador parece ser a melhor escolha.
Eu recomendaria começar criando uma tabela de teste que conterá algumas informações para você. A tabela deve ser construída para conter os dados das saídas de código abaixo. Eu recomendo armazenar o
Schedule_ID
,name
, ejob_id
no mínimo. (Se você quiser trapacear, você pode expandir os asteriscos e selecionar as colunas desejadas, e então adicionar a palavraINTO
junto com o database.schema.table_name_you_want_to_create e ele criará a tabela pela primeira vez para você. Depois disso você pode alterar em uma inserção.)Esse código retorna os agendamentos para todos os agendamentos e também executa uma junção interna para limitar os dados retornados apenas aos agendamentos emparelhados com os trabalhos atualmente habilitados.
Você pode então criar um loop ou cursor ou algo semelhante para percorrer a tabela de preparo e executar o procedimento sp_update_schedule . Isso desabilitará todos os agendamentos habilitados e emparelhados com um trabalho. Quando a manutenção estiver concluída, você poderá executar o loop mais uma vez, mas desta vez habilitando os agendamentos que você desativou anteriormente.
Se você quiser um exemplo de loop, pode ver um exemplo que criei no passado sobre o estouro de pilha .
Voltei e usei as sugestões para criar uma solução de código completa. Por favor, veja abaixo, existem dois scripts no total. O primeiro desabilitará seus trabalhos e o segundo os reabilitará. TESTE EM UM AMBIENTE DE TESTE ANTES DE COLOCAR EM PRODUÇÃO. Fonte para completude .
Roteiro um:
Roteiro dois
sp_stop_job
?Link para a documentação: https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-stop-job-transact-sql?view=sql-server-2017