2017-09-05 1 views
0

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?

+0

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

+0

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

+0

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

Antwort

0

Zuerst stoppen Sie es, wenn es ausgeführt wird und deaktivieren Sie den Job. SQL Server könnte die Idee falsch interpretieren, einen deaktivierten Job zu stoppen ...

Verwandte Themen