我們有一個4小時的數據倉庫作業,每4小時運行一次,時間爲4小時。我們希望創建一個新的「每日」時間表並讓一些流程耗時數小時。SQL Server代理作業依賴關係
然而,如果在日常工作來運行,而4小時作業仍在運行,我想它等待4小時作業完成,然後運行(或者指定的持續時間)。我還沒有決定哪個最好......
這怎麼可能?謝謝!
請不要建議第三方選項,因爲我無法控制基礎設施。
我們有一個4小時的數據倉庫作業,每4小時運行一次,時間爲4小時。我們希望創建一個新的「每日」時間表並讓一些流程耗時數小時。SQL Server代理作業依賴關係
然而,如果在日常工作來運行,而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失敗
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工作時間和結束時間和作業狀態作業完成之後纔開始時間
第四作業完成後,觸發您的日常作業,或者如果你是觸發它手工然後檢查第四作業完成與否
你也可以使用任務程序器的相同。
您好感謝你有什麼這會是什麼樣的例子? – jhowe
看看sp_getapplock。實質上,您可以創建自己的鎖,該鎖遵守所有正常的SQL Server鎖定語義。在你的情況下,你可以說「等到我可以獲得這個鎖之前繼續」。
當SQL代理作業運行,同樣的工作,不會再次運行,即使它計劃運行 – TheGameiswar