SQL-Agent-Job: Bestimmen Sie, wie lange es ausgeführt wurde

9

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.

    
Kevin Fairchild 23.05.2012, 19:30
quelle

3 Antworten

18

Diese Lösung würde funktionieren:

%Vor%

Dies ist eine allgemeinere Prüfung, die von Systemtabellen abhängig ist. Wenn Sie eine benutzerdefinierte Route bevorzugen, können Sie den Job stattdessen in eine von Ihnen erstellte Jobprotokolltabelle einfügen.

    
Zhenny 23.05.2012, 19:45
quelle
1
%Vor%     
Bikash 12.07.2013 04:40
quelle
0

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%     
Free Coder 24 24.10.2017 02:43
quelle