2016-07-06 124 views
0

我們有一個4小時的數據倉庫作業,每4小時運行一次,時間爲4小時。我們希望創建一個新的「每日」時間表並讓一些流程耗時數小時。SQL Server代理作業依賴關係

然而,如果在日常工作來運行,而4小時作業仍在運行,我想它等待4小時作業完成,然後運行(或者指定的持續時間)。我還沒有決定哪個最好......

這怎麼可能?謝謝!

請不要建議第三方選項,因爲我無法控制基礎設施。

+0

當SQL代理作業運行,同樣的工作,不會再次運行,即使它計劃運行 – TheGameiswar

回答

1

請將所有工作細節保存在一張表中,包括工作狀態,即正在進行,已完成。當日常工作運行時,你必須檢查第四項工作是否成功完成,然後開始你的日常工作,並在第四項工作完成後觸發你的日常工作。

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失敗

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) 

集excecuting工作時間和結束時間和作業狀態作業完成之後纔開始時間

第四作業完成後,觸發您的日常作業,或者如果你是觸發它手工然後檢查第四作業完成與否

你也可以使用任務程序器的相同。

+0

您好感謝你有什麼這會是什麼樣的例子? – jhowe

0

看看sp_getapplock。實質上,您可以創建自己的鎖,該鎖遵守所有正常的SQL Server鎖定語義。在你的情況下,你可以說「等到我可以獲得這個鎖之前繼續」。