Casos do Dia a Dia – Cuidado ao desabilitar um JOB via script

Fala pessoal,

Nesse post vou compartilhar uma dica para você ter cuidado ao desabilitar um JOB via Script.


Casos do Dia a Dia – Desabilitar JOB:

Essa dica pode ser muito útil quando você precisar desabilitar apenas alguns JOBs para realizar uma determinada atividade em uma janela de manutenção.

Por exemplo, imagine que o cliente informou que no final de semana vai ter uma janela de manutenção para realizar alguma das atividades abaixo, das 02:00 às 06:00 horas da manhã do domingo:

  • Atualização do Windows do servidor;
  • Atualização do Service Pack / Cumulative Update do SQL Server;
  • Atualização de Versão da Aplicação;
  • Etc…

Em qualquer uma dessas atividades, recomendo que você valide se tem algum JOB que irá executar nesse intervalo e envie para o cliente informar o que deverá ser feito com cada um deles, pois pode ter algum processo crítico que não pode deixar de ser executado. Então tome bastante cuidado com isso OK!

Uma possível situação seria:

  • Desabilitar o JOB antes da janela de manutenção;
  • Executar a atividade que foi agendada;
  • Por fim, habilitar novamente o JOB e executá-lo manualmente.

Bom, feito essa introdução, agora vamos para um exemplo prático. #gogogo


Exemplo:

Imagine que fosse necessário desabilitar 100 JOBs específicos, como você faria isso?

“Ah Luiz, vou fazer manualmente aqui um por um!”

OK, errado não tá, mas vai demorar um bocado! Então vamos a nossa dica de hoje!

Com o SELECT abaixo na tabela “sysjobs” da database “msdb” você consegue listar e filtrar (basta incluir a cláusula WHERE) os JOBs que serão afetados.

No nosso caso, vamos utilizar o JOB “TESTE JOB LUIZ” para facilitar o entendimento.

Ao consultar o JOB Activity Monitor, também podemos observar que o JOB está ATIVO e com o horário da próxima execução na coluna “Next Run”.

Agora vamos DESABILITAR o JOB via script fazendo um UPDATE direto na tabela “sysjobs” e conferir o resultado:

“Moleza Luiz! O JOB está desabilitado e posso seguir normalmente com minha atividade, certo???“

Então, essa é a pegadinha do malandro (ié ié salsi fufu) kkk.

MUITO CUIDADO!!! Pois esse UPDATE direto na tabela NÃO desabilita de fato o JOB.

No print abaixo, o JOB aparece como desabilitado, mas ele continua executando e atualizando a coluna “Next Run“.

Se você não estiver acreditando pode testar aí ou confie em mim hehe. =)

“Uai Luiz, se eu não posso fazer o UPDATE direto na tabela, o que você sugere então espertão???”

Uma outra solução mais correta seria você montar um script dinâmico para concatenar a procedure “sp_update_job” e o nome do JOB.

Repare que fizemos isso no SELECT abaixo, na coluna “Ds_Command”. Por fim, basta você copiar o texto dessa coluna, colar em uma outra query e executar, pronto! Agora sim o JOB não irá executar os próximos schedules! Lembre-se de habilitar novamente o JOB após a atividade.

OBS:

Desabilitar -> @enabled = 0

Habilitar -> @enabled = 1

Uma última observação é que se você clicar com o botão direito em cima do JOB e depois em “Disable Job” também irá funcionar corretamente, contudo fazer isso para 100 JOBs não é muito legal concorda xD.


Conclusão:

Então resumindo, se você precisar desabilitar um JOB via script:

  • INCORRETO -> fazer um UPDATE direto na tabela “sysjobs”.
  • CORRETO -> Executar a procedure “sp_update_job”.

Esse pequeno detalhe pode gerar um grande estrago se um JOB for executado indevidamente. Então fique esperto! #ficaadica


Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!

Me siga no LinkedIn e YouTube para ficar por dentro das novidades.

Abraço,

Luiz Vitor França Lima

Consultor SQL Server

2 comentários em “Casos do Dia a Dia – Cuidado ao desabilitar um JOB via script

Deixe uma resposta