SQL SERVER作业的Schedules浅析

    SQL SERVER作业的计划(Schedules),如果你没仔细研究过或没有应用一些复杂的计划(Schedules),那么你觉得SQL SERVER作业的计划(Schedules)非常好用,也没啥问题,但是我要告诉你一个“残酷”的真相,相比Linux系统的Crontab,SQL SERVER作业的计划其实是一个二等残废,很多功能要实行起来真的是让人头疼!

如果你自认为非常了解作业的配置(不要想当然,实践验证保证会让你大吃一惊)?那么接下来先看看几个问题:

1:如果你要配置作业在每个小时的第20分钟执行,例如1:20、2:20、3:20........执行,你怎么配置?

2:在计划(Schedules)里面,如果执行间隔为“小时”,那么取值必须为整数吗? 可以为2.5个小时吗?

3:在计划(Schedules)里面,如果我要设置执行间隔为90分钟计划,这样能行吗?

4:如果我想在计划(Schedules)外,多执行一次作业,如何执行? 执行了后,是否影响作业的计划Schedules?

5: 修改系统时间,是否会影响作业的Schedule?

 

1:如果你要配置作业在每个小时的第20分钟执行,例如1:20、2:20、3:20........执行,你怎么配置?

对于问题1这种类似的问题,如果你遇到过而且解决过这类问题,那么其实很简单,你只需要设置开始时间为0:20即可,否则无法实现。至于SQL SERVER为什么要这么蛋疼的设置,应该是执行间隔有一个参照时间点(第一次执行的时间点),你设置开始开始时间为0:20,即表示这个时间点作为第一次执行的参照点。

 

clip_image002

 

2:在计划(Schedules)里面,如果执行间隔为“小时”,那么取值必须为整数吗? 可以为2.5个小时吗?

关于问题2,答案是执行间隔是不能设成小数的,只能为整数,只能为1,2,3。。。。如果你将其值设置为一个小数,则当你点击确定按钮后,它会自动四舍五入变成一个整数,例如,你输入1.3 ,你点击确定后,再打开,你会发现其值变为1了,如果是1.6,则会变成2,不信的话,你可以试试。对于秒、分钟都是如此。为什么如此呢,答案在于系统表msdb.dbo.sysschedules,不明白可以看文章最后。

 

3:在计划(Schedules)里面,如果我要设置执行间隔为90分钟计划,这样能行吗?

如果没有实践过的人,肯定会信誓旦旦的说,那肯定可以啊。答案是设置执行间隔不能超过61,否则当你点击确认的时候,系统自动会将其设为60,至于原因,我暂时没有想明白,微软这个限定,感觉真蛋疼。如果真有需求需要90分钟执行一次,那怎么办? 纠结了把。

方法1: 将作业J拆分成两个一模一样的作业J1 和J2,然后设置其Schedules为3小时执行一次,两个作业错开执行,刚好能满足业务需求。不过想想都觉得麻烦!

 

方法2: 作业Schedule执行时间间隔90分钟的实现方式是通过下面方式实现的:其实是将Schedule时间设为30分钟执行一次,然后再代码里面按其规律,达到90分钟才真正执行业务逻辑SQL代码。

2.1 从0:00(服务器时间)开始,作业Schedule的频率为30分钟一次,实际上只需要执行下面时间点(实际执行时间90分钟),按规律可以分成两种:

            整点执行的(0:00, 1:00, 2:00, 3:00…..) 只有当Hour %3 = 0 时才执行存储过程。

            非整点执行的(0:30, 1:30, 2:30 ……......) 只有当Hour % 3= 1时才执行存储过程。

2.2 从0:30(服务器时间)开始,作业Schedule的频率为30分钟一次,实际上只需要执行下面时间点,按规律也可以分成两种。

            整点执行的(0:00, 1:00, 2:00, 3:00…..) 只有当Hour %3 = 2 时才执行存储过程。

            非整点执行的(0:30, 1:30, 2:30 …….......) 只有当Hour % 3= 0时才执行存储过程。

 

clip_image004

DECLARE @Hours   INT;DECLARE @Minute    INT;SELECT @Hours =CAST(SUBSTRING(CONVERT(VARCHAR(16), GETDATE(), 120),11,3) AS INT);SELECT @Minute=CAST(SUBSTRING(CONVERT(VARCHAR(16), GETDATE(), 120),15,2) AS INT);IF @Minute = 30 AND @Hours%3 = 0BEGIN INSERT INTO BI_JOB_LOG   --暂时记录执行时间SELECT GETDATE();--执行业务逻辑代码
...........................END;IF @Minute = 0 AND  @Hours%3=2BEGININSERT INTO BI_JOB_LOGSELECT GETDATE();--执行业务逻辑代码
...........................END;

 

 

4:如果我想在计划(Schedules)外,多执行一次作业,如何执行? 执行了后,是否影响作业的计划Schedules?

如下图所示,我建立一个测试作业test,每隔13分钟执行一次,在21:57, 21:58我分别手动执行了该作业两次,但是丝毫不影响该作业的调度计划。在22:06分钟还是准时执行了。

clip_image006

要查看作业下次执行时间,可以通过SELECT * FROM msdb.dbo.sysjobschedules 来查看。

 

5: 修改系统时间,是否会影响作业的Schedule?

  答案是会影响,一般要么重建该作业的调度计划或禁用作业的调度,再启用该调度来解决。有兴趣的可以自己试验一下,这里不做过多介绍。

SQL SERVER数据库作业的 Schedule 信息一般位于表 msdb.dbo.sysschedules,如下所示

包含有关 SQL Server 代理作业计划的信息。此表存储在 msdb 数据库中。其实看其参数的数据类型,你就知道第二个问题的答案了。呵呵

列名

数据类型

说明

schedule_id

int

SQL Server 代理作业计划 ID。

schedule_uid

uniqueidentifier

作业计划的唯一标识符。此值用于标识分布式作业的计划。

originating_server_id

int

作为作业计划来源的主服务器 ID。

name

sysname (nvarchar(128))

作业计划的用户定义名称。该名称在作业中必须唯一。

owner_sid

varbinary(85)

拥有作业计划的用户或用户组的 Microsoft Windows security_identifier

enabled

int

作业计划的状态:

0 = 未启用。

1 = 启用。

如果未启用计划,则不会运行该计划中的任何作业。

freq_type

int

此计划中作业运行的频率。

1 = 只运行一次

4 = 每天

8 = 每周

16 = 每月

32 = 每月,与 freq_interval 有关

64 = 在 SQL Server 代理服务启动时运行

128 = 在计算机空闲时运行

freq_interval

int

执行作业的间隔天数。该值取決于 freq_type 的值。默认值为 0,表示不使用 freq_interval

freq_type 的值

对 freq_interval 的影响

1(一次)

不使用 freq_interval (0)

4(每天)

freq_interval

8(每周)

freq_interval 为下列一个或多个值:

1 = 星期日

2 = 星期一

4 = 星期二

8 = 星期三

16 = 星期四

32 = 星期五

64 = 星期六

16(每月)

每月的 freq_interval

32(与“每月”选项相关)

freq_interval 为下列值之一:

1 = 星期日

2 = 星期一

3 = 星期二

4 = 星期三

5 = 星期四

6 = 星期五

7 = 星期六

8 = 日

9 = 工作日

10 = 休息日

64 (在 SQL Server 代理服务启动时开始)

不使用 freq_interval (0)

128(在计算机空闲时运行)

不使用 freq_interval (0)

freq_subday_type

int

freq_subday_interval 的单位。可以是下列值之一:

说明(单位)

1

在指定的时间

2

4

分钟

8

小时

freq_subday_interval

int

在每次执行作业之间发生的 freq_subday_type 的周期数。

freq_relative_interval

int

如果 freq_interval32(与“每月”选项相关),则为每月中 freq_interval 发生的时间。可以是下列值之一:

0 = 不使用 freq_relative_interval

1 = 第一次

2 = 第二次

4 = 第三次

8 = 第四次

16 = 最后一次

freq_recurrence_

factor

int

已计划执行的作业之间的周数或月数。仅当 freq_type81632 时,才使用 freq_recurrence_factor。如果此列包含 0,则不使用 freq_recurrence_factor

active_start_date

int

可以开始执行作业的日期。日期格式为 YYYYMMDD。NULL 表示当天的日期。

active_end_date

int

可以停止执行作业的日期。日期格式为 YYYYMMDD。

active_start_time

int

active_start_dateactive_end_date 之间的任意日期开始执行作业的时间。时间格式为 HHMMSS,采用 24 小时制。

active_end_time

int

active_start_dateactive_end_date 之间的任意日期停止执行作业的时间。时间格式为 HHMMSS,采用 24 小时制。

date_created

datetime

创建计划的日期和时间。

date_modified

datetime

上次修改计划的日期和时间。

version_number

int

计划的当前版本号。例如,如果计划已修改 10 次,则 version_number 为 10。

转载于:https://www.cnblogs.com/kerrycode/p/3362415.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 51. N 皇后 思考分析

目录题目思考AC代码题目 n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 思考 首先以N4为例,画出解空间树的一部分: 根据模板: void backtracking(参数) {if(终止条件){存放结果…

No module named ‘tensorflow.examples‘解决方案

想从tensorflow中导入mnist手写数字数据集,结果报错 from tensorflow.examples.tutorials.mnist import input_data import tensorflow.compat.v1 as tf tf.disable_v2_behavior()my_mnist input_data.read_data_sets("MNIST_data_bak/", one_hotTrue)&…

.NET通用基本权限系统

DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一、开发技术:B/S(.NET C# ) 1、Windows XP以上 (支援最新Win 8) 2、Microsoft Visual Studio 2010/2012 C#.NET 3、.NET Framework 4.0以上 (支援最新4.5版本) 4、SQL Server 2005以…

leetcode 37. 解数独 思考分析

目录题目核心思路的不断细化1、核心框架2、考虑到每个位置的工作3、考虑到到达最后一列、该位置的数已经预置的情况4、判断是否符合规则的函数5、确定递归终止条件确定函数返回值AC代码题目 编写一个程序,通过填充空格来解决数独问题。 一个数独的解法需遵循如下规…

快速完成兼职外包开发任务

做了很多年的开发相关的工作,做过兼职开发,也做过外包一些开发项目。 兼职人员角色时 正是经历这些事情时,每次就要提前很费经的跟公司沟通,让他们把公司内部的svn开发出去,但是就是很难,会涉及到安全各方的…

使用YOLOv5训练NEU-DET数据集

一、下载YOLOv5源码和NEU-DET(钢材表面缺陷)数据集 YOLOv5源码 NEU-DET(钢材表面缺陷)数据集 这里的数据集已经经过处理了,下载即可 若通过其他途径下载的原始数据集标签为xml格式,需要转化为txt格式XML转txt格式脚本 二、数据集准备 NEU-DET(钢材表…

带分页功能的SSH整合,DAO层经典封装

任何一个封装讲究的是,使用,多状态。Action:任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数。并根据这个参数进行查值。然后在继承ServiceManage,Service…

leetcode 198. 打家劫舍 思考分析

目录1、题目2、求解思路3、代码1、题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动…

找不到Windows照片查看器解决方法

桌面创建一个txt文本 复制这些命令,之后将后缀改为.reg,右击管理员身份运行即可 Windows Registry Editor Version 5.00 ; Change Extensions File Type [HKEY_CURRENT_USER\Software\Classes\.jpg] "PhotoViewer.FileAssoc.Tiff" ; Change E…

伙伴分配器的一个极简实现

提起buddy system相信很多人不会陌生,它是一种经典的内存分配算法,大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现,而仅仅是将该算法抽象提取出来,同时给出一份及其简洁的源码实现,以便定制扩展…

[USACO3.2.3 Spinning Wheels]

[关键字]:模拟 枚举 [题目大意]:有5个轮子,每个轮子优r个缺口并且会按一定速度不停转动,问什么时候可以使一条光线射过所有轮子。 // [分析]:从0到1000(或其他的)枚举分钟然后判断,当…

一、SQLServer2008安装(带密码)、创建数据库、C#窗体项目测试

一、下载和安装SQLServer2008 东西太大了,没法上传到资源里面,官网其他公众号都下载可以。 右击管理员身份 运行setup.exe 这个密钥不能用的话,也可以去百度其他密钥 JD8Y6-HQG69-P9H84-XDTPG-34MBB 建议改一下路径,我这边修…

【C++grammar】多态、联编、虚函数

目录1、多态概念1.多态性有两种表现的方式2、联编(实现多态)1.静态联编2.动态联编3、实现运行时多态1.为何要使用运行时多态?2.如何实现运行时多态3.多态的例子1.调用哪个同名虚函数?2. 用途:可以用父类指针访问子类对…

一 MVC - HtmlHelper

HtmlHelper类位于System.Web.Mvc.Html之中主要有七个静态类组成: FormExtensions - BeginForm, BeginRouteForm, EndForm InputExtensions - CheckBox, CheckBoxFor, Hidden, HiddenFor, Password, PasswordFor, RadioButton, RadioButtonFor, TextBox, TextBoxFor …

二、用户登录和注册

一、页面设计 一共四个页面 主页面Form1,登录页面login,注册页面resister,主菜单页面main_page 系统运行进入Form1,单击登录按钮跳转到login,数据库中得存在数据信息且输入正确才可登录成功,跳转到main_pa…

【C++grammar】访问控制与抽象类与纯虚函数

目录一、访问控制 (可见性控制)1.private、public、protected关键字2.关键字示例1、关键字对类数据成员访问的限制3. 公有继承4. 私有继承5. 保护继承6. 私有继承和保护继承的区别二、抽象类与纯虚函数1.什么是抽象类2.抽象函数/纯虚函数3.抽象类示例一、访问控制 (可见性控制)…

三、上传织物图片至SQL Server并提供name进行展示织物照片

一、数据库的建立 还是在fiber_yy数据库下创建images表 images表设计如下 二、页面完善设计 main_page页面进行功能完善 入库管理系统 warehousing页面 库存查询系统 query页面 登录注册页面前面几个博文已经实现过了,这里就再赘述了,仍是沿用前…

ARM MMU工作原理剖析[转]

一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当…

【原创】SharePoint Document library List Check out 文档时碰到的问题解决

环境:TFS(Team Foundation Server)集成的WSS 3.0(SharePoint Service 3.0) 问题:如题,祥见下图 解决:一般碰到没有经验的问题,大家当然是外事不决问谷歌了,于是谷歌搜到了这篇博客 h…

四、入库管理功能的完善

一、数据库的创建 在fiber_yy数据库下创建yy_textile表 先随便添加几条数据 二、页面的完善 登录注册页面我就不演示了,前几篇博文也都有介绍 warehousing入库页面 main_page页面进行功能完善 三、代码实现 warehousing页面 using System; using System.…