Verketten von SQL Server-Agent-Jobs

9

Ich habe mehrere Arbeitspakete für jedes, für das ich einen Job in SQL Server Agent eingerichtet habe. Manchmal sollte ich alle zusammen laufen. Was ist der beste Weg, um sie alle in einer bestimmten Reihenfolge auszuführen? Ich bin ein bisschen überrascht, dass der SQL Server-Agent keine Jobs als auszuführende Jobschritte aufnehmen kann. Ich habe es versucht

nojetlag
quelle
1
+2 Ich habe letzte Nacht darüber
nachgedacht
1
Muss jeder Ihrer Artikel ein separater Job sein? Könnten sie in einem Master-Job mit separaten Jobschritten eingerichtet werden und für jeden Jobschritt t-sql oder eine andere Logik hinzufügen, die bestimmt, ob der Schritt ausgeführt werden soll und wie (z. B. wenn (Bedingung = wahr) funktioniert, sonst nichts tun.
johndacostaa
Vielen Dank an alle, die mir geholfen haben. Es scheint, dass Aarons vorgeschlagener Weg darin besteht, dem, was ich brauche, am nächsten zu kommen. Ich werde sehen, ob ich die Erlaubnis für ein Tool dazu bekomme, sonst muss ich in SQL Agent einen Monsterjob machen :(.
nojetlag
Sie sagen "Pakete", meinen Sie SSIS-Pakete?
SqlSandwiches
stimmte John DaCosta zu. Verwenden Sie Schritte mit Bedingungen.
Alex_L

Antworten:

5

Es gibt Tools von Drittanbietern, mit denen Sie dies tun können, wenn Sie nicht über die Lernkurvenzeit oder das vorhandene Fachwissen für die Verwendung von SSIS verfügen. Haftungsausschluss: Ich arbeite für eines dieser Unternehmen. Testen Sie Event Manager in SQL Sentry - es verarbeitet SQL Server-Jobs (einschließlich SSIS-Pakete), geplante Windows-Aufgaben und sogar Oracle-Jobs. Hier sind die SQL Server-Funktionen (einschließlich Verkettung und Warteschlange):

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

Leider glaube ich nicht, dass Sie SQL Agent alleine verwenden können, um mehrere Jobs zu verketten. Die von Marian vorgeschlagene Methode sp_start_job startet Jobs asynchron. Sie können nicht warten, bis sie abgeschlossen sind, bevor Sie mit dem nächsten Befehl oder dem nächsten Schritt fortfahren.

Aaron Bertrand
quelle
Ähm, ich denke, er kann die msdb-Systemtabellen abfragen und hat den Status der anderen Jobs (und ihrer Schritte). Wenn ich falsch liege, entschuldige ich mich und gebe dir ein 6er Pack dafür, dass du das enthüllt hast :-).
Marian
Verstehe deinen Standpunkt nicht. Wie hilft ihm das Abfragen der msdb-Tabellen, Jobs miteinander zu verketten? WÄHREND 1 = 1, bis sich der Status ändert? Benachrichtigungen abfragen? Sicher, es gibt viele Möglichkeiten, wie Sie dies manuell tun können, aber es wird viel komplexer als nur das Aufrufen von sp_start_job.
Aaron Bertrand
8

SQL Agent wird als Job Scheduler nicht als "Unternehmensklasse" betrachtet. Es fehlen viele Funktionen, die Sie am Ende selbst erstellen müssen. Ein solches Beispiel wären Abhängigkeiten. Infolgedessen sind Sie gezwungen, den größten Teil dieser Logik in SSIS-Pakete zu integrieren. Nicht unbedingt eine schlechte Sache ... nur ein Schmerz, sich selbst aufzubauen und zu verwalten.

Das ist meine Antwort: Erstellen Sie ein SSIS-Paket und verwenden Sie einige t-sql-Befehle, um SQL Agent-Jobs wie gewünscht aufzurufen. Stellen Sie sicher, dass Ihre Anforderungen und Szenarien klar definiert sind. Möglicherweise möchten Sie nicht, dass beispielsweise mehrere Jobs gleichzeitig auf dieselben Tabellen treffen.

HTH

SQLRockstar
quelle
Dumm, dass ich einen "Enterprise" -Planer in einem so ausgereiften "Enterprise Edition" -Produkt erwarte :). Ich hatte Hoffnung, da ich viele Dinge als Schritt einschließen kann, lustig, dass der offensichtlichste (ein anderer Job) nicht als ausführbares Objekt verfügbar ist. Ich verwende die Jobs, um SSIS-Pakete auszuführen, die sehr komplex sind. Es scheint mir nicht der richtige Ansatz zu sein, ein anderes SSIS-Paket zu erstellen, um die Jobs flexibel auszuführen. Zumal ich wieder mit dem asynchronen sp_start_job enden werde.
Nojetlag
6

Sie sollten versuchen, mithilfe eines T-SQL-Skripts in den Schritten Ihres Jobs die gespeicherte Systemprozedur sp_start_job zu verwenden . Damit können Sie verketten, wie viele Jobs Sie möchten.

Marian
quelle
Wie von Aaron erwähnt, kann ich eine bestimmte Sequenz nicht einhalten, da sie alle fast gleichzeitig feuern (aufgrund der Tatsache, dass sie asynchron sind). Dies ist also nicht wirklich ein Verkettungsansatz, sondern ein Sammlungsansatz :)
nojetlag
Ok, vielleicht ist es nicht sehr einfach, aber Sie können trotzdem die msdb-Systemtabellen abfragen, Sie können auf eine bestimmte Zeit warten .. und dann erneut abfragen. Oder Sie können eine Nachverfolgungstabelle erstellen, in der Sie den Status der Jobschritte festlegen und basierend auf einem Auslöser automatisch die nächsten Schritte auslösen. Oder Sie können ein Tool kaufen, das das macht und etwas mehr Wert hinzufügt und auch eine schicke Benutzeroberfläche zeigt :-). Es gibt Optionen für jeden ..
Marian