2016-12-08 11 views
0

私は1つのパッケージ(パッケージA)が完了するのに約3分かかり、別のパッケージ(パッケージB)が完了するのに約4分かかるという状況があります。私はパッケージAがジョブを介して5分ごとに実行し、パッケージBは15分ごとに実行する必要があります。ただし、パッケージBは、パッケージAが完了した後にのみ実行できます。SQL Server 2012ジョブスケジューリング

5-パッケージAは

10-パッケージAが

15-パッケージAのランを実行した後、パッケージB

20-パッケージAが

を実行する実行します

25-パッケージAラン

30-パッケージAが実行されてからパッケージB

上記の要件を満たすようにジョブをスケジュールする方法はありますか。

本当にありがとうございます。前もって感謝します!パッケージBのための

+0

5/10/20/25/35/40/50/55でパッケージAを実行するようにスケジュールし、2つの手順で2番目のジョブをスケジュールする:パッケージaとパッケージbを0/15/30で実行する/ 45を実行し、パッケージa /ステップ1が成功すると、パッケージb /ステップ2に移動するように強制します。 – dfundako

+0

パッケージ 'A'を修正して、必要に応じて最後のステップとしてパッケージ' B'を実行してください。 – HABO

+0

「A」は02:15から始まり、3分間実行されます。 02:18でAが終了した直後にBが始まります。 02:20に再び「A」が始まり、「B」はまだ動いているが、「B」は02:22まで「A」と一緒に走っている。右? – HABO

答えて

0

私はちょうどパッケージAが待機スクリプトは、パッケージAが実行して停止した場合、これは30秒ごとにチェックします

WHILE EXISTS (
SELECT 
    * 
FROM 
    msdb.dbo.sysjobs_view job 
JOIN 
    msdb.dbo.sysjobactivity activity 
ON 
    job.job_id = activity.job_id 
JOIN 
    msdb.dbo.syssessions sess 
ON 
    sess.session_id = activity.session_id 
JOIN 
(
    SELECT 
     MAX(agent_start_date) AS max_agent_start_date 
    FROM 
     msdb.dbo.syssessions 
) sess_max 
ON 
    sess.agent_start_date = sess_max.max_agent_start_date 
WHERE 
    run_requested_date IS NOT NULL AND stop_execution_date IS NULL 
    AND job.name = 'package A') 
BEGIN 
WAITFOR DELAY '00:00:30'; 
END 

だろう

を実行を停止しているかどうかをチェックするためのロジックに入れるでしょう。

また、ジョブのステータスを追跡し、ステータスを記録するためにAに書き込むテーブルを作成します。

+0

ステータスを追跡するテーブルのスクリプトはどのように見えるでしょうか? – Mutai

+0

YEP テーブルdbo.tracking(JOB_STATUS、のjob_title、JOB_ID、 – user3658750

+0

'テーブルdbo.tracking( JOB_ID IDENTITY(1,1) 、のjob_title VARCHAR(30) 、JOB_STATUSビット 、job_time_start日時 を作成し、job_time_endを作成あなたは1にステータスを設定し、最後に0 にそれを設定しますAあなたの仕事の開始日時--at) - あなたの仕事の開始時に、あなたは以下の WHILEは(EXISTSだろうbは SELECT * からWHERE job_id = 1およびjob_status = 1を追跡して) BEGIN WAITFOR DELAY '00:00:30 '; END ' – user3658750