Erhalten eine "Anforderung zum Ausführen eines Jobs abgelehnt, weil der Job bereits ausgeführt wird" Wenn kein Job ausgeführt wird?

7

Haben Sie also einen ETL-Job, der über Integrationsdienste ausgeführt wird und den ich mit einem SQL-Jobnamen StartStageStore beginne. Der letzte Schritt dieses Jobs besteht darin, einen anderen Job zu starten und den Erfolg zu melden. Der Job, den dies aufruft, wird als LoopStageStore bezeichnet. Alles, was LoopStageStore tut, ist eine gespeicherte Prozedur auszuführen, die den StartStageStore-Job erneut startet. Auf diese Weise ziehen wir ständig Quelldaten in unser System. Dieser Job läuft seit einigen Wochen ohne Fehler. Bis zu den letzten zwei Nächten wurde folgende Fehlermeldung angezeigt: "Als Benutzer ausgeführt: AgentUser. SQLServerAgent-Fehler: Anforderung zum Ausführen des Jobs Stage / Store AgentUser wurde abgelehnt, da der Job bereits aufgrund einer Anforderung von User AgentUser ausgeführt wird. [SQLSTATE 42000] (Fehler 22022) Der Schritt ist fehlgeschlagen. "

Dies sollte nicht möglich sein, da der ausgeführte StartStageStore-Job beendet ist und nicht mehr ausgeführt wird, wenn LoopStageStore gestartet wurde.

StageStoreJob

Hier sehen wir den letzten Schritt, der um 12:19:14 ausgeführt wird.LoopStageStore

Und der nächste Job schlägt um 12:19:15 fehl. Es wird angezeigt, dass StartStageStore derzeit ausgeführt wird. Ich habe bereits eine Problemumgehung dafür, bei der ich den zweiten Job nur verzögere. Ich frage mich nur, ob jemand weiß, warum das passieren würde.

BEGIN
WAITFOR DELAY '00:01';
    EXECUTE dbo.LoopStageStore
END; GO
Zane
quelle
Ist die Systemgeschichte groß? Es ist möglich, dass der erste Job viel Zeit benötigt, um den Jobverlauf zu aktualisieren.
Aaron Bertrand
Es ist nicht. Wir führen nur einen Jobprotokollverlauf von einer Woche. Dies ist jedoch meine Annahme darüber, was passiert. Der Teil, der mich verwirrt, ist, dass dieses Problem höchstens einmal am Tag auftritt. Der Job läuft mehr als 20 Mal am Tag.
Zane
Ein SQL Server-System durchläuft an einem Tag viele Aktivitätsphasen. Haben Sie sich das Verfolgen von Sperren und Blockieren in msdb im Laufe des Tages angesehen und festgestellt, ob Sie eine Korrelation feststellen?
Aaron Bertrand
Das Problem scheint zu sein, dass es in bestimmten Fällen länger als 1 Sekunde dauert, bis das Schreibprotokoll in die Tabelle "Jobs abgeschlossen" abgeschlossen ist (Starcraft-Referenz Ich weiß, dass dies nicht der tatsächliche Name ist). Die Wartezeit, die ich dort eingeplant habe, sollte das Problem beheben.
Zane

Antworten:

3

Okay, das Problem, das ich hatte, war, dass die Schreibzeit in die Protokolldatei für den Jobabschluss gelegentlich länger dauert als zum Ausführen der gespeicherten Prozedur, die diese Schleife neu startet.

Die Lösung hierfür ist meine ursprüngliche Problemumgehung.

Für den Fall, dass jemand es hier verwenden möchte, ist der Code.

BEGIN
WAITFOR DELAY '00:01';
    EXECUTE dbo.LoopStageStore
END; GO

Lass es einfach ein bisschen warten.

Zane
quelle