Meine SQL Server-Instanz verfügt über einen Agentenjob mit der Bezeichnung Grand Master
, der jede Minute rund um die Uhr zu einem Zeitplan ausgeführt wird.SQL-Agentjob trotz Fehlerbehandlung in einem Schritt fehlgeschlagen
Ich habe einen anderen Job erstellt, der von Zeit zu Zeit manuell ausgeführt werden muss. Eines der ersten Dinge, die es tun muss, ist deaktivieren und stoppen Sie den Grand Master
Job ausgeführt wird, während es aktiv ist.
Schritt 1 ist es, die GM zu deaktivieren, der gut arbeitet:
exec msdb..sp_update_job @job_name = "Grand Master", @Enabled = 0
Schritt 2 jedoch fehlschlägt. Seine Aufgabe ist es zu stoppen die GM von IF läuft es läuft. Es soll nichts tun, wenn die GM nicht gerade läuft:
if exists (select 1
from msdb.dbo.sysjobs_view j
join msdb.dbo.sysjobactivity a on j.job_id = a.job_id
where a.run_requested_date is not null
and a.stop_execution_date is null
and j.name = 'Grand Master')
begin
exec msdb.dbo.sp_stop_job 'Grand Master'
end
Jedes Mal, wenn ich diesen Job ausführen, unabhängig vom Zustand des GM, schlägt es auf Schritt 2 mit diesem Fehler:
Executed as user: NT AUTHORITY\SYSTEM. SQLServerAgent Error: Request to stop job Grand Master (from User NT AUTHORITY\SYSTEM) refused because the job is not currently running. [SQLSTATE 42000] (Error 22022). The step failed.
Hat jemand irgendwelche Ideen?
Ist dies nicht nur, weil sp_stop_job versucht, den Auftrag zu beenden, und es nicht ausgeführt wird? Sollten Sie nicht zuerst prüfen, ob es läuft und ob sp_stop_job ausgeführt wird? – Leonidas199x
Vielen Dank für Ihren Kommentar @ Leonidas199x Die Abfrage 'if exists ...' prüft, ob der Job ausgeführt wird. Wenn der Job nicht ausgeführt wird, gibt diese Abfrage einen leeren Satz zurück und der Schritt sollte nichts tun und zu Schritt 3 übergehen. – Cam
Nur ein Vorschlag, aber haben Sie versucht, die beiden Schritte zu wechseln? Erst stoppen Sie es, wenn es läuft und dann den Job deaktivieren? Möglicherweise missversteht SQL Server die Idee, einen deaktivierten Job zu stoppen ... – Tyron78