Como sou um DBA (e, em muitos casos, o administrador de sistema de fato), o SQL Server é instalado em praticamente todos os servidores com os quais tenho que trabalhar regularmente. Percebi recentemente que tenho usado o SQL Agent como agendador de tarefas em praticamente todos os casos, em vez do Agendador de Tarefas nativo do Windows.
Do meu ponto de vista, o SQL Agent tem várias vantagens sobre o Agendador de Tarefas nativo do Windows:
- Remoto (da minha estação de trabalho) início/parada/monitoramento de tarefas
- Agendas compartilhadas (em vez de cada tarefa por conta própria)
- Múltiplas etapas e fluxo de controle
- Diferentes tipos de tarefas
- Alertas sobre falha/conclusão
- Pode ser configurado para atuar como diferentes usuários
- Mensagens de erro (moderadamente) descritivas, em vez de apenas um código de erro
No entanto, não posso deixar de sentir que isso é uma prática ruim - o SQL Agent deve ser reservado apenas para tarefas relacionadas ao banco de dados e devo deixar as tarefas no nível do sistema operacional em execução no Agendador de Tarefas do Windows, apesar de não gostar de sua usabilidade.
É correto confiar no SQL Agent dessa maneira? Caso contrário, devo considerar um agendador de tarefas do Windows de terceiros para obter algumas das funcionalidades que estou procurando?
Em meu trabalho anterior, fiz exatamente isso, principalmente porque os trabalhos eram todos executados em nosso cluster primário central, que era o servidor mais visível. Pude ver todas as nossas tarefas agendadas em um só lugar, em vez de ter que verificar as coisas da linha de comando em vários servidores.
Embora isso seja amplamente subjetivo (e será difícil derivar uma resposta "correta" nesse formato), não acho que haja algo inerentemente errado com essa abordagem, exceto que ela se torna um único ponto de falha.
Isso pode não ser relevante se todas as tarefas interagirem ou dependerem do servidor de banco de dados e dos serviços do SQL Server em execução (no nosso caso, sim).
Ah, e você precisa adicionar o tratamento de erros para os casos em que o servidor onde a tarefa tenta ser executada não está funcionando - algo que você não teria que fazer se a tarefa fosse configurada naquele servidor.
Pessoalmente acho que a maior ressalva seria a dificuldade em manter a lista de jobs organizada. Tanto quanto eu sei, você não pode criar pastas para organizar os trabalhos, então um grande número seria complicado. Não tenho 100% de certeza disso, já que nenhum dos meus servidores tem mais de uma dúzia de trabalhos. O Agendador de Tarefas do Server 2008 e posterior permite uma organização muito mais fácil, IMO e, em geral, tem uma funcionalidade muito melhor do que as versões anteriores. Tenho certeza de que aplicativos de terceiros fazem um trabalho ainda melhor. Eu choraria se tivesse que usar o agendador de tarefas do Server 2003 ou
at.exe
.A segunda ressalva em que posso pensar seria potencialmente colocar muita carga no servidor SQL. O Agente é um programa pequeno, mas a execução de uma tarefa longa ou complexa pode facilmente consumir muitos recursos. Esses recursos não estariam disponíveis para o mecanismo SQL. Como o mecanismo SQL está programado para ocupar cerca de 80% da memória disponível do sistema, isso pode ser um problema.
Em terceiro lugar, o backup pode ser um problema. Você não precisará apenas fazer backup do sistema de arquivos, mas também do banco de dados msdb para permitir a recuperação dos trabalhos (ou usar algo para fazer o script das tarefas em um arquivo de texto). Isso adiciona uma camada de complexidade à recuperação de desastres.
Por fim, você não gostaria de estar na posição de pagar por uma licença do SQL Server apenas para executar o SQL Server Agent. Se o banco de dados for desativado, você precisará desenvolver um plano para migrar do SQL Server Agent.
Eu ~provavelmente~ usaria o SQL Agent no gerenciador de tarefas do Windows... obviamente para tarefas relacionadas ao banco de dados.
Se você pode codificar, ou tem pessoas que podem codificar, você pode fazer um pouco com aplicativos de console e envolvê-los em um criador de serviço como o TopShelf (http://topshelf-project.com/) Isso pode ser um barato/ hack fácil para obter um pouco de desacoplamento do SQL Agent para tudo e começar a fornecer também uma camada para enfileiramento, se você estiver nesse ponto.
Pessoalmente, você parece se importar o suficiente com isso, bem como conhecer o suficiente de suas pegadinhas, que acho que ficará bem. É com as pessoas que não se importam/sabem que eu realmente me preocupo. Não tenho dúvidas de que você avaliará suas soluções em intervalos razoáveis e agirá de acordo.