AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 9925
Accepted
topwik
topwik
Asked: 2011-12-30 10:31:17 +0800 CST2011-12-30 10:31:17 +0800 CST 2011-12-30 10:31:17 +0800 CST

为什么 Sql Server Agent 的 Next Run Time 值可能不是我所期望的?这肯定是我下次工作的时候吗?

  • 772

有时,我在 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 数据?

sql-server sql-server-agent
  • 5 5 个回答
  • 12213 Views

5 个回答

  • Voted
  1. Thomas Stringer
    2011-12-30T17:02:45+08:002011-12-30T17:02:45+08:00

    你什么时候检查过这些数据?该msdb.dbo.sysjobschedules表每 20 分钟刷新一次。因此,如果您设置它然后更改它,然后运行sp_help_jobschedule存储过程,则基础数据可能尚未更新。

    当你执行这个查询时,你会得到next_scheduled_run_date什么?

    exec sp_help_jobactivity @job_name = 'YourJobScheduleName'
    
    • 4
  2. Best Answer
    topwik
    2012-01-05T13:34:31+08:002012-01-05T13:34:31+08:00

    根据 2011 年 3 月 16 日的有效开始日期,即 2012 年 1 月,我们预计日程安排将在 1 月 18 日星期三登陆。

    如果该计划的修改日期变得大于活动开始日期,则 SQL 似乎使用修改日期作为起点来确定下一个星期三开始 4 周序列。

    如果更新发生在 1 月 10 日星期二,那么下一个运行日期将变为 1 月 11 日星期三,并且从那里开始的每个下一个星期三 4 周现在相对于 1 月 11 日,现在从原始序列中省略了 1 月 18 日。

    在计算下一个运行日期时,活动开始日期似乎不再与 SQL Server 相关。

    它将简单地选择未来的第二天,从修改后的日期开始,与请求的工作日匹配;在这种情况下,下周三。

    • 2
  3. Alexander Zaltsman
    2013-10-18T05:23:40+08:002013-10-18T05:23:40+08:00

    此查询可能很有用,对于历史详细信息,您可以加入msdb.dbo.sysjobhistory

    SELECT   job.name AS JobName,  
        job.description AS [Description],  
        job.enabled AS IsEnabled,  
        max(act.start_execution_date) AS StartExecutionDate,  
        max(act.next_scheduled_run_date) AS NextScheduledRunDate  
    FROM     msdb.dbo.sysjobs AS job  
        LEFT OUTER JOIN  
        [msdb].[dbo].[sysjobactivity] AS act  
        ON act.job_id = job.job_id  
    GROUP BY job.name, job.description, job.enabled;
    
    • 2
  4. ne1410s
    2019-06-18T23:11:56+08:002019-06-18T23:11:56+08:00

    我的作业活动监视器上的Next Run字段与作业计划中明显配置的字段不一致。

    就我而言,它发现该SQL Server Agent服务没有运行(出于某种原因)。我启动了服务并刷新了 Job Activity Monitor,现在数据是准确的。

    • 1
  5. curlyhairedgenius
    2016-03-15T09:32:29+08:002016-03-15T09:32:29+08:00

    msdb.dbo.sp_help_job似乎总是返回正确的实际next_run_date/ next_run_time。

    它使用sp_get_composite_job_info, 执行以下调用来实际检索next_run_date/ next_run_time:

          IF ((@@microsoftversion / 0x01000000) >= 8) -- SQL Server 8.0 or greater
            INSERT INTO @xp_results
            EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id
          ELSE
            INSERT INTO @xp_results
            EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner
    

    由于sysjobschedule似乎不可靠,请使用sp_help_job.

    如果您需要操作返回的值,您可以使用以下openrowset技巧:

          SELECT  * 
          FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
          , 'set fmtonly off exec msdb.dbo.sp_help_job')
    
    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve