Chaînage des travaux de l'Agent SQL Server

9

J'ai plusieurs packages de travail pour chacun, j'ai configuré un travail dans l'agent serveur SQL. Parfois, je devrais courir tous ensemble. Quelle est la meilleure façon de les exécuter tous dans une séquence donnée? Je suis un peu surpris que l'agent de serveur SQL ne puisse pas inclure les travaux comme étapes de travail à exécuter. J'ai essayé

nojetlag
la source
1
+2 J'y pensais hier soir :)
jcolebrand
1
Est-ce que chacun de vos articles doit être un travail distinct? Pourraient-ils être configurés dans un travail principal avec des étapes de travail distinctes et pour chaque étape de travail, ajouter t-sql ou une autre logique qui détermine si l'étape doit être exécutée et comment (par exemple, si (condition = true) fonctionne, ne rien faire d'autre.
johndacostaa
Merci à tous de m'avoir aidé, il semble que la manière suggérée par Aarons soit de se rapprocher de ce dont j'ai besoin. Je verrai si j'obtiens la permission d'un outil pour le faire, sinon dans SQL Agent je devrai faire un travail monstre :(.
nojetlag
Vous dites "packages", vous voulez dire les packages SSIS?
SqlSandwiches
d'accord avec John DaCosta. Utilisez des étapes avec des conditions.
Alex_L

Réponses:

5

Il existe des outils tiers qui vous permettront de le faire, si vous n'avez pas le temps de la courbe d'apprentissage ou l'expertise existante pour utiliser SSIS. Avertissement: je travaille pour l'une de ces sociétés. Consultez le gestionnaire d'événements de SQL Sentry - il gère les travaux SQL Server (y compris les packages SSIS), les tâches planifiées Windows et même les travaux Oracle. Voici les fonctionnalités de SQL Server (y compris le chaînage et la mise en file d'attente):

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

Malheureusement, je ne pense pas que vous pourrez utiliser SQL Agent seul pour chaîner plusieurs travaux. La méthode sp_start_job suggérée par Marian lance des travaux de manière asynchrone; vous ne pouvez pas attendre qu'ils se terminent avant de passer à la commande suivante ou à l'étape suivante.

Aaron Bertrand
la source
Umm, je pense qu'il peut interroger les tables système msdb et avoir un statut des autres jobs (et de leurs étapes). Si je me trompe, je m'excuserai et vous donnerai un pack de 6 pour avoir révélé ceci :-).
Marian
Je ne comprends pas votre point. Comment l'interrogation des tables msdb va-t-elle l'aider à enchaîner les travaux? PENDANT 1 = 1 jusqu'à ce que le statut change? Notifications de requête? Bien sûr, il existe de nombreuses façons de le faire manuellement, mais ce sera beaucoup plus complexe que d'appeler simplement sp_start_job.
Aaron Bertrand
8

L'Agent SQL n'est pas considéré comme une "classe d'entreprise" en tant que planificateur de travaux. Il manque beaucoup de fonctionnalités que vous finissez par avoir à vous construire. Un tel exemple serait les dépendances. En conséquence, vous êtes obligé de mettre la plupart de cette logique dans des packages SSIS. Pas nécessairement une mauvaise chose ... juste une douleur à construire et à gérer soi-même.

Donc, c'est ma réponse, créez un package SSIS et utilisez des commandes t-sql pour appeler les travaux de l'Agent SQL comme vous le souhaitez. Assurez-vous que vos exigences et vos scénarios sont clairement définis. Vous ne voudrez peut-être pas que plusieurs travaux atteignent les mêmes tables en même temps, par exemple.

HTH

SQLRockstar
la source
Stupide, je m'attendais à un planificateur "d'entreprise" dans un produit "Enterprise Edition" aussi mature :). J'avais de l'espoir car je peux inclure beaucoup de choses comme une étape, drôle que le plus évident (un autre travail) ne soit pas disponible en tant qu'objet exécutable. J'utilise les travaux pour exécuter des packages SSIS qui sont très complexes, devoir construire un autre package SSIS pour exécuter les travaux de manière flexible ne me semble pas la bonne approche. D'autant plus que je vais finir avec l'asynch sp_start_job.
nojetlag
6

Vous devriez essayer d'utiliser un script T-SQL dans les étapes de vos travaux, en utilisant la procédure stockée système sp_start_job . Il vous permettra de chaîner le nombre d'emplois que vous souhaitez.

Marian
la source
Comme mentionné par Aaron, cela ne me permettra pas de garder une séquence donnée, car ils se déclencheront tous presque en même temps (car ils sont asynchrones). Ce n'est donc pas vraiment une approche de chaînage, plutôt une approche de collection :)
nojetlag
Ok, peut-être que ce n'est pas très simple, mais vous pouvez toujours interroger les tables système msdb, vous pouvez attendre un moment spécifique .. puis interroger à nouveau. Ou vous pouvez créer un tableau de suivi où vous mettez le statut des étapes des travaux et en fonction d'un déclencheur, vous pouvez automatiquement déclencher les étapes suivantes. Ou vous pouvez acheter un outil qui fait cela et ajoute un peu plus de valeur et affiche également une interface utilisateur sophistiquée :-). Il y a des options pour tout le monde ..
Marian