1

Sqlエージェントジョブを実行しようとすると、同時に実行されている以前のインスタンスがないことを確認しています。SqlAgentジョブを実行しているときの権限の問題

IF NOT EXISTS(SELECT 
          1 
         FROM msdb.dbo.sysjobactivity ja 
         LEFT JOIN msdb.dbo.sysjobhistory jh 
          ON ja.job_history_id = jh.instance_id 
         JOIN msdb.dbo.sysjobs j 
         ON ja.job_id = j.job_id 
         JOIN msdb.dbo.sysjobsteps js 
          ON ja.job_id = js.job_id 
          AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id 
         WHERE ja.session_id = (SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC) 
         AND j.name = N'JobName' 
         AND start_execution_date is not null 
         AND stop_execution_date is null 
       ) 
       BEGIN 
       -- code to run the job 
       END 

しかし、私はステップが失敗した

The SELECT permission was denied on the object 'syssessions', database 'msdb', schema 'dbo'. [SQLSTATE 42000] (Error 229).

というエラーを取得しています:クエリは以下のとおりです。ジョブステップはsysadmin特権を持つアカウントで実行されます。

データベースにもdb_owner特権を持つアカウントを割り当てようとしました。それでも、同じ問題に直面しています。

このアクセス権の問題を解決する方法について教えてください。

答えて

1

他のインスタンスが実行中であるかどうかを手動で確認する必要はないと思います。

サンプル・ジョブのステップ:

SELECT 1; 
WAITFOR DELAY '00:00:45'; 

二回、それを実行しよう:

EXEC msdb.dbo.sp_start_job 'job' 
-- Job 'job' started successfully. 

EXEC msdb.dbo.sp_start_job 'job' 

Msg 22022, Level 16, State 1, Line 3

SQLServerAgent Error: Request to run job Job() refused because the job is already running from a request by <>.

+1

感謝。同じジョブを再度開始すると、ジョブは開始されません。並行性の問題が心配でした。 –

関連する問題