2014 年 SQL 的动态工作计划
Dynamic Job Schedule in SQL 2014
我有一份 SQL 工作,我一直试图在特定时间(下午 4 点 - 晚上 7 点)将其配置为 运行。
我在这段时间内创建了我想要 运行 的工作(我们称之为 DynJob)。我将它设置为默认时间表,我希望它的日期为 运行,默认时间值为下午 4 点。
但我不希望它每次 运行 都在下午 4 点 运行。
我希望它在下午 4 点到晚上 7 点之间 运行。
所以我创建了另一个工作(SJob)。此作业在下午 2 点 运行 秒(比 DynJob 的预定开始时间早 2 小时)。 SJob 所做的只是 运行 对 dbo.sysjobschedules 的查询,并进行一些数学运算以得出介于 160000 和 190000 之间的某个值,并将该值插入 next_run_time 字段,其中 schedule_id = DynJob 的计划 ID。
而且有效(不是真的)。它会调整 table 中的时间,我可以看到它得到一个值(比方说 175691)。但是,这一切都不是。因为到了下午 4 点,DynJob 仍然得到 运行。然后 SQL 在 运行.
之后将 DynJobs next_run_time 设置回下午 4 点 (160000)
我做错了吗? 有没有一种更简单的方法来设置 window 时间而不是一个静态时间的作业计划?
这是我上面说的TSQL我用的。
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @CallTime int = 1
DECLARE @MaxTime int = 30000
SET @CallTime = @MaxTime*RAND() + 160000
UPDATE dbo.sysjobschedules
SET next_run_time = @CallTime
WHERE schedule_id = 1
一如既往,感谢您抽出宝贵时间!
P.S。是的,我知道有 2 个工作和 2 个时间表只是为了让它工作是愚蠢的,但我是一个新手并且不知道 SQL 服务器代理的方式 :) 所以任何答案或有用的文档总是很感激!如果这是愚蠢的,告诉我!但也要解释一下
在 sp_update_schedule 存储过程中找到我的解决方案。使用一个运行此存储过程的作业来生成和更新其他作业的计划,我让它工作了。
唯一棘手的部分是确保您配置了正确的时间,并且您在作业中使用了正确的权限 运行 sp_update_schedule 过程...
"Only members of sysadmin can modify a schedule owned by another user."
我有一份 SQL 工作,我一直试图在特定时间(下午 4 点 - 晚上 7 点)将其配置为 运行。 我在这段时间内创建了我想要 运行 的工作(我们称之为 DynJob)。我将它设置为默认时间表,我希望它的日期为 运行,默认时间值为下午 4 点。
但我不希望它每次 运行 都在下午 4 点 运行。 我希望它在下午 4 点到晚上 7 点之间 运行。
所以我创建了另一个工作(SJob)。此作业在下午 2 点 运行 秒(比 DynJob 的预定开始时间早 2 小时)。 SJob 所做的只是 运行 对 dbo.sysjobschedules 的查询,并进行一些数学运算以得出介于 160000 和 190000 之间的某个值,并将该值插入 next_run_time 字段,其中 schedule_id = DynJob 的计划 ID。
而且有效(不是真的)。它会调整 table 中的时间,我可以看到它得到一个值(比方说 175691)。但是,这一切都不是。因为到了下午 4 点,DynJob 仍然得到 运行。然后 SQL 在 运行.
之后将 DynJobs next_run_time 设置回下午 4 点 (160000)我做错了吗? 有没有一种更简单的方法来设置 window 时间而不是一个静态时间的作业计划?
这是我上面说的TSQL我用的。
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @CallTime int = 1
DECLARE @MaxTime int = 30000
SET @CallTime = @MaxTime*RAND() + 160000
UPDATE dbo.sysjobschedules
SET next_run_time = @CallTime
WHERE schedule_id = 1
一如既往,感谢您抽出宝贵时间!
P.S。是的,我知道有 2 个工作和 2 个时间表只是为了让它工作是愚蠢的,但我是一个新手并且不知道 SQL 服务器代理的方式 :) 所以任何答案或有用的文档总是很感激!如果这是愚蠢的,告诉我!但也要解释一下
在 sp_update_schedule 存储过程中找到我的解决方案。使用一个运行此存储过程的作业来生成和更新其他作业的计划,我让它工作了。
唯一棘手的部分是确保您配置了正确的时间,并且您在作业中使用了正确的权限 运行 sp_update_schedule 过程...
"Only members of sysadmin can modify a schedule owned by another user."