SQL Server 2012 作业调度
SQL Server 2012 job scheduling
我遇到这样一种情况,我有 1 个包(包 A)需要大约 3 分钟才能完成,而另一个包(包 B)需要大约 4 分钟才能完成。我需要通过作业每 5 分钟将包 A 发送到 运行,并且每 15 分钟将包 B 发送到 运行。但是B包只能在A包完成后运行
例子
5- 套餐 A 运行s
10- 套餐 A 运行s
15- 套餐 A 运行s 然后是套餐 B
20- 套餐 A 运行s
25- 套餐 A 运行s
30- 套餐 A 运行s 然后是套餐 B
有什么方法可以安排作业来满足上述要求吗?
非常感谢您的帮助。提前致谢!
对于包 B,我将放入逻辑来检查包 A 是否已停止 运行
等待脚本是
WHILE EXISTS (
SELECT
*
FROM
msdb.dbo.sysjobs_view job
JOIN
msdb.dbo.sysjobactivity activity
ON
job.job_id = activity.job_id
JOIN
msdb.dbo.syssessions sess
ON
sess.session_id = activity.session_id
JOIN
(
SELECT
MAX( agent_start_date ) AS max_agent_start_date
FROM
msdb.dbo.syssessions
) sess_max
ON
sess.agent_start_date = sess_max.max_agent_start_date
WHERE
run_requested_date IS NOT NULL AND stop_execution_date IS NULL
AND job.name = 'package A')
BEGIN
WAITFOR DELAY '00:00:30';
END
这将每 30 秒检查一次包 A 是否已停止 运行。
或者,您可以创建一个 table 来跟踪作业状态并写入 A 以跟踪状态。
我遇到这样一种情况,我有 1 个包(包 A)需要大约 3 分钟才能完成,而另一个包(包 B)需要大约 4 分钟才能完成。我需要通过作业每 5 分钟将包 A 发送到 运行,并且每 15 分钟将包 B 发送到 运行。但是B包只能在A包完成后运行
例子
5- 套餐 A 运行s
10- 套餐 A 运行s
15- 套餐 A 运行s 然后是套餐 B
20- 套餐 A 运行s
25- 套餐 A 运行s
30- 套餐 A 运行s 然后是套餐 B
有什么方法可以安排作业来满足上述要求吗?
非常感谢您的帮助。提前致谢!
对于包 B,我将放入逻辑来检查包 A 是否已停止 运行
等待脚本是
WHILE EXISTS (
SELECT
*
FROM
msdb.dbo.sysjobs_view job
JOIN
msdb.dbo.sysjobactivity activity
ON
job.job_id = activity.job_id
JOIN
msdb.dbo.syssessions sess
ON
sess.session_id = activity.session_id
JOIN
(
SELECT
MAX( agent_start_date ) AS max_agent_start_date
FROM
msdb.dbo.syssessions
) sess_max
ON
sess.agent_start_date = sess_max.max_agent_start_date
WHERE
run_requested_date IS NOT NULL AND stop_execution_date IS NULL
AND job.name = 'package A')
BEGIN
WAITFOR DELAY '00:00:30';
END
这将每 30 秒检查一次包 A 是否已停止 运行。
或者,您可以创建一个 table 来跟踪作业状态并写入 A 以跟踪状态。