Das Szenario
Es gibt bestimmte SQL Agent-Jobs, die alle paar Minuten im Laufe des Tages ausgeführt werden sollen.
Es gibt legitime Zeiten, in denen es seinen nächsten Zeitplan verfehlen wird, weil es immer noch vom vorherigen Plan läuft.
Ab und zu könnte ein Job "hängen". Dies führt nicht zu einem Fehler (da der Job noch nicht gestoppt wurde). In diesem Fall kann der Job manuell angehalten werden und funktioniert beim nächsten Mal einwandfrei. Es wurde entwickelt, um dort wieder aufzugreifen, wo es aufgehört hat.
Was ist der effizienteste Weg ...?
Ich möchte herausfinden, wie lange (in Sekunden) gerade ein SQL-Agent-Job mit dem Namen "JobX" läuft. Wenn es gerade nicht läuft, können wir einfach Null zurückgeben.
Auf diese Weise kann ich den Job stoppen, wenn er länger als eine bestimmte Zeit läuft.
Ich nehme an, dass eine Kombination aus xp_sqlagent_enum_jobs und sysjobhistory verwendet werden könnte, aber ich bin gespannt, ob es bessere Lösungen gibt ... und kann hoffentlich von den Hindernissen profitieren, die der Rest von euch bereits kennengelernt hat.
Was Sie manuell tun, klingt nach etwas, das als "Wachhund-Schleife" bekannt ist. Im Grunde genommen ein SQL-Job, der Agentenjobs startet und / oder überwacht und sie bei Bedarf ausschaltet.
Der folgende Code wurde von hier übernommen, und sollte Ihnen helfen, die Notwendigkeit zu entfernen, Jobs manuell zu überwachen und zu beenden, wenn sie für eine längere Zeit ausgeführt wurden:
%Vor%Tags und Links sql sql-server sql-server-2008 sql-agent-job