藍色小惡魔 - 舒活札記

跳到主文

記錄小惡魔想脫離惡魔黨控制的心路歷程...

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 7月 24 週三 201301:38
  • 自動重新啟動資料庫工作排程

MS SQL 教學 

MIS 或 DBA 經常會設計定時抓取資料的 Schedule SQL Job,但因為上游資料來源(或程式)延遲或失敗,過了 Job 執行時間也許才差幾秒幾分鐘或可容許的延遲時間內來源資料變已產生完畢了,可是定時抓取的 SQL Job 早已停工,此時 User 來上工了發現系統有問題通知 MIS 處理,這時也只能癡癡地等上游資料跑完後,MIS 再手動執行 SQL JOB... 或者更慘的是,假日被急摳來處理...!!

MIS 轄下受連累的系統因為資料不夠新鮮以致使用單位無法作業,只好吃下問題單 ="=... 接著安排人跟催上遊甚麼時候補好資料庫。

為了能安心休假只好下海找解套......

咱們工程師只會寫程式解決問題所以 SQL 很弱,常常去碰資料庫只為了重新啟動 JOB 當然覺得痛苦。

人在屋簷下不得不低頭,到了 user site 古人 MIS 已經搞了一堆 SQL 跑來跑去,只好配合在這個模式下找出不讓系統開發人員痛苦的解決方案!

其實用個簡單的 MS SQL 涵式,就可以解決這個惱人的問題了!


(轉貼時請加註來源)
引用自:藍色小惡魔《自動重新啟動資料庫工作排程》
http://www.imp.idv.tw/play/forum/viewthread?thread=2191

SQL 2000 : sp_update_jobschedule
SQL 2005, 2008 : sp_update_schedule (建議) or sp_update_jobschedule (為相容 2000 而殘留的) 

只要兩個簡單的要素即可高枕無憂
1. 要能判斷是否需重新執行的方法。
2. 要建立一個執行一次的 job schedule。

你的 JOB 應該有兩個 Schedule 如下,第一個是你正常應該要啟動的、一個是當有問題的時候需要被啟動的(disable),這個 shcedule 在以下範例我命名為 reschedule。


接著你要依資料庫版本查出重新啟動 schedule 的 key,use msdb 後參考以下方法找出 schedule_id 或 job_id。 

SQL 2005, 2008 使用 scuedule_id 即可,可透過管理工具的作業屬性中的排程清單找到 schedule_id,或使用和 SQL 2000 相同指令也可,以上圖為例,ID 506 就是 @schedule_id。 

SQL 2000 只能用 job_id,則需呼叫 exec sp_help_job @job_name = '[JOB NAME]',以上圖為例 @job_name = 'ADM_LETTERS_COUNT (2009-11-20)'。取得 @job_id = '499235D9-4EB1-45C5-A66D-1D4D53BA1C98'

然後我以如果資料更新失敗,則一個小時後重新執行一次為例,如下: 
-- 主要資料處理 SQL (建議規劃防重複執行判斷) 
INSERT ADM_LETTERS_COUNT SELECT ... 

-- 第一要素:設計判斷資料更新失敗的邏輯

declare @adm_data_date_diff int 
set @adm_data_date_diff = (select datediff(day, max(ADMLC_DATADATE), getdate()) from ADM_LETTERS_COUNT)


-- 第二要素:判斷需要重新啟動則安排一小時候執行 (以下範例會跑到當天凌晨才停止,建議可再設計停跑時間。) 

if(@adm_data_date_diff > 1) begin 
declare @today int, @new_datetime datetime, @new_time int
set @today = convert(int, convert(char(8), getdate(), 112))
set @new_datetime = dateadd(hour, 1, getdate())
set @new_time = datepart(hour, @new_datetime)*10000+datepart(minute, @new_datetime)*100
use msdb
/* for SQL 2005 new function
exec sp_update_schedule
@schedule_id = 506, @enabled = 1, @active_start_date = @today, @active_start_time = @new_time
--*/

exec sp_update_jobschedule
@job_id = '499235D9-4EB1-45C5-A66D-1D4D53BA1C98',
@name = 'reschedule', @enabled = 1,
@active_start_date = @today,
@active_start_time = @new_time
end

為了易懂以上簡化程式碼,其他加強的機制可以再繼續自行應用。 

以下簡單舉例防重複執行判斷並不難,只要把第一要素套上來即可,如下... 

declare @adm_data_date_diff int 
set @adm_data_date_diff = (select datediff(day, max(ADMLC_DATADATE), getdate()) from ADM_LETTERS_COUNT)

if(@adm_data_date_diff > 1) begin
INSERT ADM_LETTERS_COUNT SELECT ...
end


set @adm_data_date_diff = (select datediff(day, max(ADMLC_DATADATE), getdate()) from ADM_LETTERS_COUNT)

if(@adm_data_date_diff > 1) begin
declare @today int, @new_datetime datetime, @new_time int
...(略)...
exec sp_update_jobschedule @job_id ...
end
文章標籤
全站熱搜
創作者介紹
創作者 藍色小惡魔 的頭像
藍色小惡魔

藍色小惡魔 - 舒活札記

藍色小惡魔 發表在 痞客邦 留言(0) 人氣(1,262)

  • 全站分類:
  • 個人分類:SQL
▲top

參觀人氣

  • 本日人氣:0
  • 累積人氣:375,251

個人資訊

藍色小惡魔
暱稱:
藍色小惡魔
分類:
數位生活
好友:
累積中
地區:

Donate BTC


廣告

文章分類

toggle 癡想 (16)
  • 職場甘苦 (0)
  • 舒活日記 (0)
  • 科技新聞 (0)
  • 工作機會 (0)
  • 技術文件 (0)
  • 網路應用 (0)
  • 開箱文 (0)
  • big data (0)
  • 自由貨幣 (0)
  • SQL (0)
  • 資訊安全 (0)
  • 專案管理 (0)
  • Google (0)
  • 每天得到 (0)
  • 廣告文章 (0)
  • 兒童程式 (0)
toggle APP (5)
  • 免費軟體 (0)
  • 行動應用 (0)
  • 節日應用 (0)
  • 阿婆的事 (0)
  • 電玩遊戲 (0)
toggle 吃饗 (15)
  • 大安區106 (0)
  • 內湖區114 (0)
  • 美食訊息 (0)
  • 萬華區108 (0)
  • 國外-巴里島 (0)
  • 埔里鎮545 (0)
  • 中山區104 (0)
  • 員山鄉264 (0)
  • 西屯區407 (0)
  • 恆春鎮946 (0)
  • 國外-加拿大 (0)
  • 瑞芳區224 (0)
  • 玉井區714 (0)
  • 新竹市300 (0)
  • 新興區800 (0)
toggle 自由來福 (9)
  • 無人商店 (0)
  • 投資理財 (0)
  • 台灣旅遊中部 (0)
  • 健康保健 (0)
  • 出國旅遊 (0)
  • 台灣旅遊南部 (0)
  • 台灣旅遊北部 (0)
  • 台灣旅遊東部 (0)
  • 仙人的選擇權 (0)
  • 廣告文章 (0)
  • 幼兒教育 (0)
  • 工作甘苦談 (0)
  • 網際網路 (0)
  • 藍瘦香菇 (0)
  • 愛打頭 (0)
  • 戈氏吃貨 (0)
  • 魔言魔語 (0)
  • 科技新聞 (0)
  • 電玩動漫 (0)
  • 世界節日 (0)
  • 司法屍法 (0)
  • 閒話家常 (0)
  • Google (0)
  • 無奇不有 (0)
  • 星聞趣事 (0)
  • 網路腥聞 (0)
  • 資料庫 (0)
  • 黑心事件 (0)
  • 電腦硬體 (0)
  • 小豆豆 (0)
  • 電腦軟體 (0)
  • 微軟軟體 (0)
  • 小惡魔花園 (0)
  • lasy 樂寶 (0)
  • 無名美女 (0)
  • 未分類文章 (1)

最新文章

    文章搜尋

    廣告

    熱門文章

    • ()免費線上解壓縮網站-online
    • ()按勞基法請事假或病假應該扣多少錢?
    • ()Mac caps lock 燈不亮了?都是 macOS Sierra 惹的禍!
    • ()Mac 關閉螢幕的快速鍵hotkey
    • ()YouTube 怎樣建立多個頻道並用同一個 Google 帳戶管理
    • ()SQL 日期時間轉換 (Convert Date Time to string)
    • ()[心得] 離職員工應知自保之道
    • ()用 SQL 把數字補 0
    • ()ACPI Suspend Type S1 or S3 其實共有六種狀態
    • ()EZ鍵盤滑鼠記錄器

    文章精選

    blueimp
    PIXNET Logo登入