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.
Hier sehen wir den letzten Schritt, der um 12:19:14 ausgeführt wird.
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
Antworten:
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.
Lass es einfach ein bisschen warten.
quelle