我有一项工作,我在协调的时间段内手动启动,做了一堆繁重的工作(主要是恢复备份和为不同的服务器配置)
有几个作业计划以分钟到几天的增量运行。我想“关闭”调度程序,这样在我的手动工作完成之前,什么都不会按计划运行。我意识到,在调度程序重新启动后,错过的作业将在下一个预定时间之前不会再次运行。
- 第一步:停止调度程序
- 几个举重的步骤:做艰苦的工作
- 最后一步:启动调度器
我找到了一个Oracle命令,但我是 100% Microsoft SQL Server
我知道如果我关闭 SQL 代理,作业将不会运行,但这不是我想要的。
今天存在的工作预计下次不会是相同的工作。使用EXEC dbo.sp_update_job禁用作业不是一个可行的解决方案。
附加信息:可能还有一些作业由于某种原因被故意禁用,但确实希望重新启用。停止调度程序似乎是最好的选择。
我建议首先创建一个暂存表,该表将为您保存一些信息。该表应构造为保存以下代码输出的数据。我建议至少存储
Schedule_ID
、name
和。job_id
(如果你想作弊,你可以展开星号并选择你想要的列,然后INTO
在database.schema.table_name_you_want_to_create中添加单词,它会第一次为你创建表。之后你可以更改将其放入插入中。)该代码返回所有计划的计划,并且它还执行内部连接以将返回的数据限制为仅与当前启用的作业配对的计划。
然后,您可以创建一个循环或游标或类似于循环临时表并执行sp_update_schedule 过程的东西。这将禁用所有已启用并与作业配对的计划。维护完成后,您可以再次运行循环,但这一次启用您之前禁用的计划。
如果您想要一个循环的示例,您可以查看我过去在 stack overflow 上创建的示例。
我已经回去并使用这些建议来创建完整的代码解决方案。请看下面,总共有两个脚本。第一个将禁用您的作业,第二个将重新启用它们。在将其投入生产之前,在测试环境中进行测试。 完整性的来源。
脚本一:
脚本二
sp_stop_job
?文档链接:https ://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-stop-job-transact-sql?view=sql-server-2017