Encadeando trabalhos do SQL Server Agent

9

Eu tenho vários pacotes de trabalho para cada um que configurei um trabalho no sql server agent. Às vezes eu deveria correr todos juntos. Qual é a melhor maneira de executá-los todos em uma determinada sequência? Estou um pouco surpreso que o agente sql server não possa incluir tarefas como etapas a serem executadas. Eu tentei

nojetlag
fonte
11
2 Eu estava pensando sobre isso ontem à noite :)
jcolebrand
11
cada um de seus itens precisa ser um trabalho separado? Eles poderiam ser configurados em um trabalho mestre com etapas de trabalho separadas e, para cada etapa do trabalho, adicionar t-sql ou outra lógica que determine se a etapa deve ser executada e como (por exemplo, se (condição = true) funciona, outra coisa não funciona)
johndacostaa
Obrigado a todos por me ajudarem, parece que o caminho sugerido por Aarons está chegando mais perto do que eu preciso. Vou ver se eu conseguir a permissão para uma ferramenta para fazê-lo, caso contrário, dentro do SQL Agent I terá que fazer um trabalho monstro :(.
nojetlag
Você diz "pacotes", você quer dizer pacotes SSIS?
SqlSandwiches
concordou com John DaCosta. Use etapas com condições.
Alex_L

Respostas:

5

Existem ferramentas de terceiros disponíveis que permitem fazer isso, se você não tiver o tempo da curva de aprendizado ou os conhecimentos existentes para usar o SSIS. Disclaimer: Eu trabalho para uma dessas empresas. Confira o Gerenciador de Eventos do SQL Sentry - ele lida com trabalhos do SQL Server (incluindo pacotes SSIS), tarefas agendadas do Windows e até trabalhos Oracle. Aqui estão os recursos do SQL Server (incluindo encadeamento e enfileiramento):

http://sqlsentry.net/event-manager/sql-server-enterprise-features.asp

Infelizmente, acho que você não poderá usar o SQL Agent por si só para encadear vários trabalhos. O método sp_start_job sugerido por Marian inicia os trabalhos de forma assíncrona; você não pode esperar que eles sejam concluídos antes de passar para o próximo comando ou a próxima etapa.

Aaron Bertrand
fonte
Umm, acho que ele pode consultar as tabelas do sistema msdb e ter um status dos outros trabalhos (e suas etapas). Se eu estiver errado, peço desculpas e lhe darei um pacote de 6 por revelar isso :-).
Marian
Não entenda seu ponto de vista. Como a consulta às tabelas msdb o ajudará a encadear trabalhos juntos? ENQUANTO 1 = 1 até o status mudar? Notificações de consulta? Certamente, existem várias maneiras de fazer isso manualmente, mas será muito mais complexo do que chamar sp_start_job.
Aaron Bertrand
8

O SQL Agent não é considerado "classe corporativa" como um agendador de tarefas. Falta muita funcionalidade que você acaba tendo que construir por conta própria. Um exemplo disso seria dependências. Como resultado, você é forçado a colocar a maior parte dessa lógica nos pacotes SSIS. Não é necessariamente uma coisa ruim ... apenas uma dor para construir e gerenciar a si mesmo.

Portanto, essa é a minha resposta, crie um pacote SSIS e use alguns comandos t-sql para chamar os trabalhos do SQL Agent conforme desejado. Certifique-se de ter seus requisitos e cenários claramente definidos. Você pode não querer que vários trabalhos atinjam as mesmas tabelas ao mesmo tempo, por exemplo.

HTH

SQLRockstar
fonte
Bobo eu esperando um agendador "corporativo" em um produto "Enterprise Edition" tão maduro :). Eu esperava que eu pudesse incluir muitas coisas como um passo, engraçado que o mais óbvio (outro trabalho) não estivesse disponível como objeto executável. Eu uso os trabalhos para executar pacotes SSIS que têm muita complexidade, ter que criar outro pacote SSIS para executar os trabalhos com flexibilidade não parece a abordagem correta para mim. Especialmente porque eu terminarei novamente com o asynch sp_start_job.
nojetlag
6

Você deve tentar usar um script T-SQL nas etapas de suas tarefas, usando o procedimento armazenado do sistema sp_start_job . Isso permitirá que você encadeie quantos empregos deseja.

Marian
fonte
Como mencionado por Aaron, não me permitirá manter uma determinada sequência, pois todas serão acionadas quase ao mesmo tempo (devido ao fato de serem assíncronas). Portanto, este não é realmente uma abordagem encadeamento, em vez de uma abordagem coleção :)
nojetlag
Ok, talvez não seja muito simples, mas você ainda pode consultar as tabelas do sistema msdb, pode esperar por um tempo específico. Em seguida, consulte novamente. Ou você pode criar uma tabela de rastreamento na qual coloca o status das etapas da tarefa e, com base em um gatilho, pode disparar automaticamente as próximas etapas. Ou você pode comprar uma ferramenta que faz isso e agrega um pouco mais de valor e também mostra uma interface de usuário sofisticada :-). Existem opções para cada um ..
Marian