recent

Titulo

Job Refused Because The Job Is Already Running

Error Message:
[000] Request to run job YOUR JOB NAME  (from User…….) refused because the job is already running from a request by User …..

Have you seen this error before? This is something you will see under SQL Server Agent log or in an email alert.What does this error mean? It is pretty clear from the error message that your job is refused from execution. Why? because the job you are trying to execute is currently running. The job must be stopped before you can run it or wait till the job is done running.

When do you experience this issue?
You will encounter this problem when the Job execution time is greater than the job run interval. In a simple word, the SQL Agent fired your scheduled job while the job is running.

Now, you know why the problem occurred, how do you solve this?
This problem has more than one solutions, you can pick the one that fits your case.
  • Increase the time interval between jobs. The job run interval should be greater than the job run time. 
  • Add a code to stop your job, then run it
  • Add IF-Else condition or Try and Catch statement to check the status of the job before executing it.
Any solutions described above works! The goal here is to schedule a job when it is NOT running. You can pick the solution that fits your needs. I personally like the options of checking the status of a job before running it. Although this requires more work than the rest, this to me is a real solution that will never fail again.

The first two options are very easy to implement and requires very minor change to your job. With this blog, I will show you how you can implement the solution of my choice!! Again, the goal here is to check the status of job and schedule it  accordingly.

Let's implement it!
SELECT
  CASE ProductLine
    WHEN 'R' THEN 'Road'
    WHEN 'M' THEN 'Mountain'
    ELSE 'Other'
  END AS Category,
  ProductNumber,
  Name
FROM Production.Product;
GO
DECLARE @CharGender char(1) = 'g',
        @Gender varchar(20),
        @Salutation varchar(3) = 'Mr.';
SET @Gender =
             CASE
               WHEN @CharGender = N'm' OR
                 (@CharGender = N'M' AND
                 @Salutation = N'Mr') THEN N'Male'
               WHEN @CharGender = N'f' OR
                 @CharGender = N'F' THEN N'Female'
               ELSE 'Unknown'
             END;
SET @Gender = @Salutation +
CASE
  WHEN @CharGender = N'm' OR
    @CharGender = N'M' THEN N'Male'
  WHEN @CharGender = N'f' OR
    @CharGender = N'F' THEN N'Female'
  ELSE 'Unknown'
END;
SET @Gender =
             CASE @CharGender
               WHEN N'm' THEN N'Male'
               WHEN N'f' THEN N'Female'
               ELSE 'Unknown'
             END;
SET @Gender = @Salutation +
CASE @CharGender
  WHEN N'm' THEN N'Male'
  WHEN N'f' THEN N'Female'
  ELSE 'Unknown'
END;
GO
Always remember to check the job status before running it and this is the first logic that you will see in my code [and you should add it to yours also]. This basic logic of checking ( if job exists and the job status)  applies to every databases out there and the scheduling software.

Interested in working with me? I can be reached at pbaniya04[at]gmail.com for any questions, consulting opportunities or you may drop a line to say HELLO. Thank your again for visiting my blog and looking forward to serving you more.

Have a Database-ious Day!

No comments

Powered by Blogger.