SQL Server代理作业依赖项

时间:2016-07-06 16:46:55

标签: sql-server sql-server-2012 database-administration

我们有一个4小时的数据仓库作业,每4小时运行4小时。我们希望创建一个新的“每日”计划,并让一些流程耗尽数小时。

但是,如果每日作业运行且4h作业仍在运行,我希望等待4h作业完成,然后运行(或具有指定的持续时间)。我还没决定哪个最好......

这怎么可能?谢谢!

请不要建议第三方选项,因为我无法控制基础设施。

2 个答案:

答案 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锁定语义。在你的情况下,你可以说"等到我能在获得此锁之前继续"。