Encadenamiento de trabajos del Agente SQL Server

9

Tengo varios paquetes de trabajo para cada uno que he configurado un trabajo en el agente del servidor SQL. A veces debería correr todos juntos. ¿Cuál es la mejor manera de ejecutarlos todos en una secuencia dada? Estoy un poco sorprendido de que el agente del servidor SQL no pueda incluir trabajos como pasos de trabajo para ejecutar. lo intenté

nojetlag
fuente
1
+2 Estaba pensando en esto anoche :)
jcolebrand
1
¿Cada uno de sus artículos debe ser un trabajo separado? ¿Podrían configurarse en un trabajo maestro con pasos de trabajo separados y para cada paso de trabajo agregar t-sql u otra lógica que determine si el paso debe ejecutarse y cómo (por ejemplo, si (condición = verdadero) hacer el trabajo no hace nada?
johndacostaa
Gracias a todos por ayudarme, parece que la forma sugerida por Aarons es acercarse más a lo que necesito.
Veré
Usted dice "paquetes", ¿quiere decir paquetes SSIS?
SqlSandwiches
de acuerdo con John DaCosta. Use pasos con condiciones.
Alex_L

Respuestas:

5

Existen herramientas de terceros que le permitirán hacer esto, si no tiene el tiempo de la curva de aprendizaje o la experiencia existente para usar SSIS. Descargo de responsabilidad: trabajo para una de esas empresas. Consulte Event Manager de SQL Sentry: maneja trabajos de SQL Server (incluidos los paquetes SSIS), tareas programadas de Windows e incluso trabajos de Oracle. Estas son las características de SQL Server (incluido el encadenamiento y las colas):

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

Desafortunadamente, no creo que pueda usar el Agente SQL por sí solo para encadenar múltiples trabajos. El método sp_start_job que Marian sugirió inicia los trabajos de forma asincrónica; no puede esperar a que se completen antes de pasar al siguiente comando o al siguiente paso.

Aaron Bertrand
fuente
Umm, creo que puede consultar las tablas del sistema msdb y tener el estado de los otros trabajos (y sus pasos). Si me equivoco, me disculparé y te daré un paquete de 6 por revelar esto :-).
Marian
No entiendo tu punto. ¿Cómo va a consultar las tablas msdb para ayudarlo a encadenar trabajos juntos? MIENTRAS 1 = 1 hasta que el estado cambie? ¿Consultar notificaciones? Seguro que hay muchas maneras de hacerlo manualmente, pero será mucho más complejo que simplemente llamar a sp_start_job.
Aaron Bertrand
8

El Agente SQL no se considera "clase empresarial" como planificador de trabajos. Carece de muchas funcionalidades que terminas teniendo que construir tú mismo. Un ejemplo de ello serían las dependencias. Como resultado, se ve obligado a poner la mayor parte de esta lógica en los paquetes SSIS. No necesariamente es algo malo ... solo un dolor para construirse y administrarse.

Entonces, esa es mi respuesta, compile un paquete SSIS y use algunos comandos t-sql para llamar a los trabajos del Agente SQL como lo desee. Asegúrese de tener sus requisitos y escenarios claramente definidos. Es posible que no desee que varios trabajos lleguen a las mismas tablas al mismo tiempo, por ejemplo.

HTH

SQLRockstar
fuente
Tonto, esperaba un planificador "empresarial" en un producto tan maduro "Enterprise Edition" :). Tenía esperanza ya que puedo incluir muchas cosas como un paso, curioso que el más obvio (otro trabajo) no esté disponible como objeto ejecutable. Utilizo los trabajos para ejecutar paquetes SSIS que tienen mucha complejidad, tener que construir otro paquete SSIS para ejecutar los trabajos de manera flexible no me parece el enfoque correcto. Especialmente porque terminaré de nuevo con el asynch sp_start_job.
nojetlag
6

Debería intentarlo utilizando un script T-SQL en los pasos de sus trabajos, utilizando el procedimiento almacenado del sistema sp_start_job . Le permitirá encadenar cuántos trabajos desea.

Mariana
fuente
Según lo mencionado por Aaron, no me permitirá mantener una secuencia dada, ya que todos dispararán casi al mismo tiempo (debido al hecho de que son asíncronos). Así que esto no es realmente un enfoque de encadenamiento, en lugar de un enfoque de recolección :)
nojetlag
Ok, tal vez no sea muy sencillo, pero aún puede consultar las tablas del sistema msdb, puede esperar un momento específico ... luego consultar nuevamente. O puede hacer una tabla de seguimiento donde coloque el estado de los pasos de los trabajos y, en función de un desencadenante, puede activar automáticamente los siguientes pasos. O puede comprar una herramienta que haga eso y agregue un poco más de valor y también muestre una IU elegante :-). Hay opciones para cada uno ..
Marian