SQL 服务器代理作业依赖性

SQL Server Agent job dependency

我们有一个 4 小时的数据仓库作业,按 4 小时计划每 4 小时 运行s。我们想创建一个新的 'daily' 时间表,并让一些流程 运行 不在工作时间。

但是,如果日常作业到了运行,而4h的作业还在运行ning,我想等4h的作业完成,那么运行(或具有指定的持续时间)。我还没有决定哪个最好...

这怎么可能?谢谢!

请不要建议第 3 方选项,因为我无法控制基础架构。

请将所有工作详细信息保存在一个 table 中,包括工作状态,即进行中、已完成。当日常工作 运行 你必须检查第 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)

设置作业执行前的开始时间和作业完成后的结束时间和作业状态

完成第 4 个作业后触发您的日常作业,或者如果您手动触发它,则检查第 4 个作业是否完成

您也可以使用任务计划。

看看sp_getapplock。本质上,您可以创建自己的锁,它遵守所有正常的 SQL 服务器锁定语义。在你的情况下,你可以说 "wait until I can obtain this lock before continuing".