Wir verwenden SQL Server 2008 und haben einen Job, der normalerweise mehr als 18 Stunden dauert und viele Schritte hat. Ich habe gesucht und kann anscheinend keine Antwort darauf finden, was passiert, wenn Sie einen Job während der Ausführung ändern. Im Folgenden finden Sie eine Zusammenfassung der Änderungen, die ich an dem Job während der Ausführung vorgenommen habe:
1) Ich habe einen neuen Schritt an der Position "Schritt 2" eingefügt. Der Job war bereits in Schritt 15, daher wird dieser Schritt vermutlich erst bei der nächsten Ausführung des Jobs ausgelöst.
2) Ich löschte den letzten Schritt (Schritt # 30).
3) Ich änderte Schritt 29 von "gehe zum nächsten Schritt" zu "Berichtserfolg beenden".
Da Schritt 15 bei der heutigen Änderung in Bearbeitung war, werden die Änderungen, die ich an den letzten Schritten vorgenommen habe, wirksam, wenn der Auftrag heute an diesem Punkt eintrifft, oder werden sie erst beim nächsten Mal wirksam?
Beeinflusst die Tatsache, dass ich einen neuen Schritt in die Position # 2 eingefügt habe, auch die Reihenfolge der Schritte für den aktuellen Lauf?
Ich habe den Job nach dem Abschluss überprüft und habe jetzt eine schlüssige Antwort. Das Ändern eines Jobs während der Ausführung von DOES wirkt sich auf die aktuelle Ausführung des Jobs aus. Basierend auf der Jobhistorie erfolgt die Verarbeitung von Jobs mit SQL Server 2008 schrittweise auf der Grundlage der Schrittnummer. Die Schritte werden nicht in den Speicher geladen oder anderweitig gespeichert, während der Job ausgeführt wird.
In meinem spezifischen Szenario habe ich einen Schritt an der Position # 2 hinzugefügt. Dies führte dazu, dass alle nachfolgenden Schrittnummern zum Zeitpunkt der Aktualisierung um eins erhöht wurden. Der Job führte den Schritt # 15 aus, als ich ihn aktualisierte, also wurde # 15 nach der Aktualisierung # 16. Als Ergebnis wurde dieselbe gespeicherte Prozedur (neuer Schritt # 16) erneut ausgeführt, als Schritt # 15 beendet wurde.
Auch nachdem ich den letzten Schritt des Jobs entfernt habe, wurde er nicht ausgeführt, als der Job diesen Schritt erreichte, da er nicht mehr als Teil des Jobs existierte.
Die beste Vorgehensweise besteht darin, die Jobs während der Ausführung nicht zu aktualisieren. Die Ergebnisse sind vorhersehbar, aber es wird nicht empfohlen, wenn Sie sich die Ausführung von Schritten nicht oder zweimal leisten können / p>
Ich benutze SQL Managment Studio 2012 Service Pack 3, und die Antwort ist hängt davon ab .
Beispiel
Job #1
drei Schritte hat. Step 3
löst Job #2
aus. Job #1
ist auf Step 2
SELECT 1
und ziehe die Zeile EXEC msdb.dbo.sp_start_job job #2
aus. Step 2
und löst Job #2
auf Step 3
aus. Der Grund dafür, dass die Codeänderung keine Auswirkungen hatte, ist, dass der Job bereits ausgeführt wurde und auf einer eigenen lokalen Kopie des Skripts ausgeführt wird, auf die sich nachfolgende Codeänderungen nicht auswirken.
Tags und Links sql-server sql-server-2008 tsql