是否可以在前一个子计划完成后运行 SQL Server 维护子计划

是否可以在前一个子计划完成后运行 SQL Server 维护子计划

我有一个维护计划,用于备份和清理旧数据。它有三个子计划,每个子计划都有自己的时间表。我可以将子任务 2 的时间表设置为“子任务 1 完成后”吗?

答案1

是的,你应该可以,但方式有点迂回。如果你转到 SQL Server 代理并查看作业,你会注意到这些都是维护计划的所有部分,都被分解成单独的任务。双击其中一个,然后转到步骤部分。注意到它是如何说“成功时退出作业报告成功”的吗?这可以更改为退出报告成功、退出报告失败或转到下一步。

现在回到作业属性的步骤部分,您应该能够添加新步骤。新步骤的类型可能默认设置为 T-SQL 脚本,这正是我们想要的。您设置的所有维护计划选项实际上只是运行 T-SQL 来完成作业。您甚至可以通过双击任务然后单击查看 T-SQL 在维护计划设计器中查看它们正在使用的 T-SQL。

因此,现在您可以看到,维护计划实际上只是创建单独的 SQL Server 代理作业并运行 T-SQL 脚本(使用维护计划工具时以集成服务包的形式)来执行它们。如果您可以想出自己的 T-SQL 脚本来执行备份和清理,那么您可以将它们安排在同一作业下,并简单地告诉每个作业在完成后进入下一步。

我不知道如何直接从 MaintenancePlan 设计器执行此操作,因为它似乎只有一个小日历,您可以在其中设置作业运行的时间,但只需稍加努力,您就可以按照自己的意愿运行备份计划。以这种方式创建自定义作业可能与通过设计器略有不同,因为您没有使用集成服务,但它仍然非常强大。

编辑:

实际上,仔细想想,如果您愿意,您可以在设计器中复制它。您不必创建额外的子计划,只需将所有 3 个子计划合并为一个大子计划即可。这样,它们都会在同一个 SQL Server 代理作业下运行,您可以将它们设置为一个接一个地运行。同样,这是一种有点迂回的方法,但每次您创建一个新的子计划时,它都会将其视为一个需要单独安排的全新作业。

相关内容