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.pswp.cn/news/377733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377733.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 51. N 皇后 思考分析

目錄題目思考AC代碼題目 n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上,并且使皇后彼此之間不能相互攻擊。 思考 首先以N4為例,畫出解空間樹的一部分: 根據模板: void backtracking(參數) {if(終止條件){存放結果…

Django實戰(18):提交訂單

前面的內容已經基本上涵蓋了Django開發的主要方面,我們從需求和界面設計出發,創建模型和修改模型,并通過scaffold作為開發的起點;在scaffold的基礎上重新定制模板,并且通過Model類和Form類對用戶輸入的數據進行校驗。我…

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)&…

julia example_使用Julia中的Example的sign()函數

julia exampleJulia| sign()函數 (Julia | sign() function) sign() function is a library function in Julia programming language, it returns the sign of the given value in the form of -1/1. sign()函數是Julia編程語言中的庫函數,它以-1 / 1的形式返回給…

.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(鋼材表…

kotlin獲取屬性_Kotlin程序獲取系統MAC地址

kotlin獲取屬性The task is to get system MAC address. 任務是獲取系統MAC地址。 package com.includehelpimport java.net.InetAddressimport java.net.NetworkInterface//Function to get System MACfun getSystemMac(): String? {return try {val OSName System.getProp…

帶分頁功能的SSH整合,DAO層經典封裝

任何一個封裝講究的是,使用,多狀態。Action:任何一個Action繼承分頁有關參數類PageManage,自然考慮的到分頁效果,我們必須定義下幾個分頁的參數。并根據這個參數進行查值。然后在繼承ServiceManage,Service…

在windows phone Mango中使用原生代碼開發程序

本文不討論創建可執行的exe程序,主要想說明怎么在silverlight程序里面調用由原生代碼所編寫的DLL(C / ARM). 原生代碼可以調用更多的API,但是這并不是說你就能隨意獲得那些你沒有權限的資源,比如,你可以使用CopyFile這個API,但是如果你試圖把文件Copy到\Windows文件夾,就會得到…

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…

數字拆分為斐波那契數列_檢查數字是否為斐波那契

數字拆分為斐波那契數列Description: 描述: We are often used to generate Fibonacci numbers. But in this article, we are going to learn about how to search Fibonacci numbers in an array? 我們經常被用來產生斐波那契數。 但是在本文中,我們…

伙伴分配器的一個極簡實現

提起buddy system相信很多人不會陌生,它是一種經典的內存分配算法,大名鼎鼎的Linux底層的內存管理用的就是它。這里不探討內核這么復雜實現,而僅僅是將該算法抽象提取出來,同時給出一份及其簡潔的源碼實現,以便定制擴展…

[USACO3.2.3 Spinning Wheels]

[關鍵字]:模擬 枚舉 [題目大意]:有5個輪子,每個輪子優r個缺口并且會按一定速度不停轉動,問什么時候可以使一條光線射過所有輪子。 // [分析]:從0到1000(或其他的)枚舉分鐘然后判斷,當…

一、SQLServer2008安裝(帶密碼)、創建數據庫、C#窗體項目測試

一、下載和安裝SQLServer2008 東西太大了,沒法上傳到資源里面,官網其他公眾號都下載可以。 右擊管理員身份 運行setup.exe 這個密鑰不能用的話,也可以去百度其他密鑰 JD8Y6-HQG69-P9H84-XDTPG-34MBB 建議改一下路徑,我這邊修…

python獲取當前日期_Python程序獲取當前日期

python獲取當前日期In the below example – we are implementing a python program to get the current date. 在下面的示例中-我們正在實現一個python程序來獲取當前日期 。 Steps: 腳步: Import the date class from datetime module. 從datetime模塊導入日期類…

【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 …