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".
我们有一个 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".