有时,我在 sysjobschedules.next_run_date 和时间字段中看到一些与 sql server 代理的值不一致的地方。
我有一个与 sql 调度系统交互的 Web 界面。
我创建了一个测试工作,该工作于 2011 年 3 月 16 日上午 9:45 开始。我已将其设置为每 4 周的星期三。
从今天开始,这应该将下一次运行日期和时间设置为 1 月 18 日 9:45,但我的工作的下一次运行日期/时间值是 1 月 4 日。
作业属性中的值看起来不错。
开始日期是 2011
年 3 月 16 日。频率值都是正确的。
但似乎 SQL 未能正确地解决此问题。
以下是 sp_help_jobschedule proc 中有关工作的一些相关信息
freq_type 8
freq_interval 8
freq_subday_type 1
freq_subday_interval 1
freq_relative_interval 0
freq_recurrence_factor 4
active_start_date 20110316
active_end_date 99991231
active_start_time 154500
active_end_time 55959
date_created 2011-12-29 20:37:05.737
schedule_description Every 4 week(s) on Wednesday at 154500
next_run_date 20120104
next_run_time 154500
如果开始日期是 2011 年 3 月 16 日 9:45,则根据作业的属性,下一个运行日期将落在 2012 年 1 月 4 日是没有意义的。
我想我的问题是,我能在多大程度上依赖这个 Next Run Date 数据?
你什么时候检查过这些数据?该
msdb.dbo.sysjobschedules
表每 20 分钟刷新一次。因此,如果您设置它然后更改它,然后运行sp_help_jobschedule
存储过程,则基础数据可能尚未更新。当你执行这个查询时,你会得到next_scheduled_run_date什么?
根据 2011 年 3 月 16 日的有效开始日期,即 2012 年 1 月,我们预计日程安排将在 1 月 18 日星期三登陆。
如果该计划的修改日期变得大于活动开始日期,则 SQL 似乎使用修改日期作为起点来确定下一个星期三开始 4 周序列。
如果更新发生在 1 月 10 日星期二,那么下一个运行日期将变为 1 月 11 日星期三,并且从那里开始的每个下一个星期三 4 周现在相对于 1 月 11 日,现在从原始序列中省略了 1 月 18 日。
在计算下一个运行日期时,活动开始日期似乎不再与 SQL Server 相关。
它将简单地选择未来的第二天,从修改后的日期开始,与请求的工作日匹配;在这种情况下,下周三。
此查询可能很有用,对于历史详细信息,您可以加入
msdb.dbo.sysjobhistory
我的作业活动监视器上的
Next Run
字段与作业计划中明显配置的字段不一致。就我而言,它发现该
SQL Server Agent
服务没有运行(出于某种原因)。我启动了服务并刷新了 Job Activity Monitor,现在数据是准确的。msdb.dbo.sp_help_job
似乎总是返回正确的实际next_run_date
/next_run_time
。它使用
sp_get_composite_job_info
, 执行以下调用来实际检索next_run_date
/next_run_time
:由于
sysjobschedule
似乎不可靠,请使用sp_help_job
.如果您需要操作返回的值,您可以使用以下
openrowset
技巧: