2016-07-06 30 views
0

4時間ごとに4時間ごとに実行される4時間のデータウェアハウスジョブがあります。私たちは、新しい「毎日」のスケジュールを作成し、いくつかのプロセスを時間外に実行したいと考えています。SQL Serverエージェントのジョブ依存性

しかし、日常のジョブが実行されていて、4hジョブがまだ実行されている場合は、4hジョブが完了するのを待ってから実行してください(または指定された時間があります)。私はまだ最高だと決めていません...

これはどうやって可能ですか?ありがとう!

私はインフラストラクチャを支配していないため、第三者のオプションを提案しないでください。

+0

SQLエージェントジョブが実行されている場合、同じジョブは実行予定であっても実行されません。 – TheGameiswar

答えて

1

すべてのジョブの詳細を、ジョブのステータス、つまり進行中の完了を含む1つのテーブルに保持してください。日常の仕事が実行されると、4番目の仕事が正常に完了したことを確認し、毎日の仕事を開始し、4番目の仕事の完了後に毎日の仕事をトリガーする必要があります。

create TABLE [dbo].[tblDailyJob](
    [JobId] [int] NOT NULL, 
    [JobDesc] [varchar](500) NOT NULL, 
    [JobStartTime] [datetime] NULL, 
    [JobEndTime] [datetime] NULL, 
    [JobStatus] [int] NOT NULL, 
CONSTRAINT [PK_tblDailyJob] PRIMARY KEY CLUSTERED 
(
    [JobId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

ALTER TABLE [dbo].[tblDailyJob] ADD CONSTRAINT [DF_tblDailyJob_JobStatus] DEFAULT ((0)) FOR [JobStatus] 
GO 

仕事ステータス - 0始め、1が完了進歩、2では、図3は、ジョブの完了後に作業時間と終了時間とジョブステータスをexcecutingまでの時間を開始

insert into tblDailyJob values(1,'1st Job',null,null,0) 
insert into tblDailyJob values(2,'2nd Job',null,null,0) 
insert into tblDailyJob values(3,'3rd Job',null,null,0) 
insert into tblDailyJob values(4,'4th Job',null,null,0) 
insert into tblDailyJob values(5,'Daily Job',null,null,0) 

セットを失敗しなかっ

4番目のジョブが完了した後に毎日ジョブをトリガーするか、手動でトリガーしてから4番目のジョブが完了したかどうかを確認してください。

タスクスケジューラを使用することもできます。

+0

こんにちは、ありがとうございます。 – jhowe

0

sp_getapplockを見てください。基本的に、すべての通常のSQL Serverのロックセマンティクスに従った独自のロックを作成できます。あなたの場合は、「続ける前にこのロックを得るまで待つ」と言うことができます。

関連する問題