我们有一个4小时的数据仓库作业,每4小时运行4小时。我们希望创建一个新的“每日”计划,并让一些流程耗尽数小时。
但是,如果每日作业运行且4h作业仍在运行,我希望等待4h作业完成,然后运行(或具有指定的持续时间)。我还没决定哪个最好......
这怎么可能?谢谢!
请不要建议第三方选项,因为我无法控制基础设施。
答案 0 :(得分: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)
在完成工作之前设置开始时间,在完成工作后设置结束时间和工作状态
完成第4个工作后会触发您的日常工作,或者如果您手动触发它,则检查第4个工作是否完成
您也可以使用任务计划表。
答案 1 :(得分:0)
看看sp_getapplock。实质上,您可以创建自己的锁,遵循所有正常的SQL Server锁定语义。在你的情况下,你可以说"等到我能在获得此锁之前继续"。