链接SQL Server代理作业


9

我有几个工作包,每个我在sql server代理中设置了工作。有时我应该一起跑。按给定顺序运行它们的最佳方法是什么?我对SQL Server代理无法将作业作为要执行的作业步骤感到有些惊讶。我确实尝试过


1
+2我昨晚在想这件事:)
jcolebrand

1
您的每个商品都需要单独工作吗?是否可以将它们设置为具有单独作业步骤的主作业,并为每个作业步骤添加t-sql或其他逻辑,以确定该步骤是否应运行以及如何运行(例如,如果(condition = true)执行工作,否则不执行任何操作)
johndacostaa

感谢每个人给我一些帮助,看来Aarons建议的方法是使我的需求最接近。我会看到,如果我得到许可的工具做到这一点,否则内SQL代理我将不得不做出一个怪物工作:(。
nojetlag

您说“软件包”,是指SSIS软件包吗?
SqlSandwiches,2011年

同意约翰·达科斯塔(John DaCosta)的观点。使用有条件的步骤。
Alex_L

Answers:


5

如果您没有足够的学习时间或使用SSIS的现有专业知识,可以使用第三方工具来执行此操作。免责声明:我为其中一家公司工作。查看SQL Sentry-它处理SQL Server作业(包括SSIS程序包),Windows计划任务,甚至Oracle作业。以下是SQL Server功能(包括链接和排队):

不幸的是,我认为您无法单独使用SQL Agent来链接多个作业。玛丽安(Marian)建议的sp_start_job方法异步启动作业。您不能等到它们完成后再继续执行下一个命令或下一步。


嗯,我认为他可以查询msdb系统表,并具有其他作业(及其步骤)的状态。如果我输错了,我将道歉并给您6个装的信息,以示:-)。
玛丽安

不明白你的意思。查询msdb表将如何帮助他将工作链在一起?1 = 1直到状态改变?查询通知?当然,您可以通过多种方式手动执行此操作,但这要比仅调用sp_start_job复杂得多。
阿龙贝特朗

8

SQL Agent作为作业计划程序不被视为“企业类”。它缺乏很多功能,最终您不得不自行构建。这样的例子之一就是依赖关系。结果,您不得不将大多数这种逻辑放入SSIS包中。不一定是坏事...只是建立和管理自己的痛苦。

因此,这就是我的答案,构建一个SSIS包并使用一些t-sql命令根据需要调用SQL Agent作业。确保明确定义了您的要求和方案。例如,您可能不想让多个作业同时击中同一张表。

高温超导


我很期待在这样成熟的“企业版”产品中使用“企业”调度程序:)。我有希望,因为我可以将很多东西作为一个步骤,有趣的是,最明显的(另一项工作)不能用作可执行对象。我使用作业来运行复杂性很高的SSIS程序包,而对我来说,不得不构建另一个SSIS程序包来灵活地运行作业似乎是不正确的方法。特别是因为我将再次以异步sp_start_job结束。
nojetlag 2011年

6

您应该尝试在作业的步骤中使用T-SQL脚本,使用系统存储过程sp_start_job。它将允许您链接想要的工作数量。


正如亚伦(Aaron)提到的那样,它不允许我保持给定的顺序,因为它们几乎都在同一时间发射(由于它们是异步的)。因此,这实际上不是链接方法,而是集合方法:)
nojetlag 2011年

好的,也许不是很简单,但是您仍然可以查询msdb系统表,可以等待特定的时间..然后再次查询。或者,您可以制作一个跟踪表,在其中放置作业步骤的状态,并根据其上的触发器自动触发下一步。或者,您可以购买一个工具来执行此操作,并增加更多价值并显示精美的UI :-)。每个选项都有
玛丽安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.