建立sql做業(JOB)

在SQL Server平常需求處理中,會遇到定時執行或統計數據的需求,這時咱們能夠經過做業(JOB)來處理,從而經過代理的方式來實現數據的自動處理。一下爲SQL Server中建立做業的腳本,供你們參考使用。數據庫

 

1、建立做業(JOB) 服務器

-- SQL SERVER2000 做業(JOB)T-SQL建立腳本
-- author: jiajia
-- 服務器: (local)測試

--參數說明:
-- daily_pr_stat_test (做業名稱:測試JOB名稱,可根據需求進行修改)
-- @command = N'exec pr_stat_test' (做業調用可執行存儲過程或SQL語句:pr_stat_test--執行數據統計的可運行存儲過程,固然你也能夠換成可執行的SQL語句)
-- @database_name = N'test' (運行數據庫:test--存儲過程所在庫)
-- @active_start_date = 20121207 (做業執行的開始日期:爲NULL時表示當前日期,格式爲YYYYMMDD。20121207--該做業開始執行日期)
-- @active_end_date = 99991231 (做業執行的中止日期:默認爲99991231,格式爲YYYYMMDD)
-- @active_start_time = 84100 (做業執行的開始時間:格式爲HHMMSS,84100--該做業開始執行時間)
-- @active_end_time = 235959 (做業執行的中止時間:格式爲HHMMSS,235959--該做業執行結束時間)
-- @freq_type = 4 (做業執行時間的值:1--一次;4--天天;8--每週;16--每個月;32--每個月,相對於 freqinterval;64--SQLServerAgent 服務啓動時運行;128--計算機空閒時運行)
-- @freq_interval = 1 (重複執行次數:1--天天執行一次)
-- @freq_subday_type = 1 (重複方式:0x1--在指定的時間;0x2--秒;0x4--分鐘;0x8--小時)
-- @freq_subday_interval = 0 (重複週期數:0--不重複,1--每小時執行一次)
-- @freq_relative_interval = 0 (第幾個相對時間執行:容許的值爲1,2,4,8表明第1~4個相對時間,16表示最後一個相對時間)
-- @freq_recurrence_factor = 0 (做業的兩次計劃執行之間的間隔週數或月數:只有 freq_type 爲 八、16 或 32 時,纔會使用 freq_recurrence_factor)ui

 

 


BEGIN TRANSACTION           
  DECLARE @JobID BINARY(16) 
  DECLARE @ReturnCode INT   
  SELECT @ReturnCode = 0    代理

--判斷本地做業類別是否存在,不存在則添加
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1
  EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'code

--判斷做業是否存在,如存在則提示處理,不存在則新建
IF (SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test') > 0
  PRINT N'做業「daily_pr_stat_test」已經存在,於是將不被替換。'
ELSE
BEGINserver

  -- 添加做業
  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'daily_pr_stat_test', @owner_login_name = N'sa',對象

@description = N'沒有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_pageip

= 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback資源

  -- 添加做業步驟
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'1', @command = N'exec pr_stat_test',

@database_name = N'test', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0,

@retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0,

@on_fail_action = 2
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
  EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

  -- 添加做業調度
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'1', @enabled = 1, @freq_type = 4, @active_start_date =

20121207, @active_start_time = 84100, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0,

@freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

  -- 添加目標服務器
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION         
GOTO   EndSave             
QuitWithRollback:
  IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

 

 

2、刪除做業(JOB)

一、使用 SQL Server Management Studio刪除

   刪除單個做業:

   在「對象資源管理器」中,鏈接到 SQL Server 數據庫引擎實例,再展開該實例。
   依次展開「SQL Server 代理」和「做業」,右鍵單擊要刪除的做業,再單擊「刪除」。
   在「刪除對象」對話框中,確認選擇了要刪除的做業。
   單擊「肯定」。


   刪除多個做業:

   在「對象資源管理器」中,鏈接到 SQL Server 數據庫引擎實例,再展開該實例。
   展開「SQL Server 代理」。
   右鍵單擊「做業活動監視器」,而後單擊「查看做業活動」。
   在做業活動監視器中,選擇要刪除的做業,右鍵單擊選擇的做業,而後選擇「刪除做業」。

 

二、使用SQL語句刪除

   USE msdb ;
   GO

   EXEC sp_delete_job

       @job_name = N'daily_pr_stat_test' ;
   GO

 

3、查看做業(JOB)的相關信息

-- 查看做業是否存在
SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test' 

 

--查詢做業運行狀態信息(run_status: 0=出錯失敗,1=成功,3=已取消,5=狀態未知),SQL Server2005以上
exec msdb.dbo.sp_help_jobactivity  @job_name=N'daily_pr_stat_test' 

 

-- 查看數據庫中當前定義的全部做業的所有屬性
exec msdb..sp_help_job

 

--查看做業歷史

select a.*,b.name

from msdb.dbo.sysjobhistory a

inner join msdb.dbo.sysjobs b

on a.job_id=b.job_id

and b.name='daily_pr_stat_test'

--and a.run_status=0 --做業失敗信息
order by a.run_time desc

 

-- 查看指定做業的所有屬性
exec msdb..sp_help_job @job_name=N'daily_pr_stat_test'

 

-- 可查看執行語句或者存儲過程等等
exec msdb..sp_help_jobstep @job_name=N'daily_pr_stat_test'

 

-- 查看做業歷史執行時間等信息

A、SQL Server2000版本中:

SELECT  j.name AS 'JobName', 
        s.step_id AS 'Step', 
        s.step_name AS 'StepName',
        run_date, 
        run_time, 
        convert(varchar(32),left(run_date,4)+'-'+substring(convert(varchar(10),run_date),5,2)+'-'+right(run_date,2),120)+' '
       +substring(convert(varchar(10),run_time),1,len(run_time)-4)+':'+substring(convert(varchar(10),run_time),len(run_time)-3,2)+':'+right(run_time,2) AS 'RunDateTime',    
        ((run_duration /10000 * 3600 + (run_duration / 100 ) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes' 
FROM    msdb.dbo.sysjobs j 
        INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id 
        INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id 
        AND s.step_id = h.step_id 
        AND h.step_id <> 0 
WHERE   j.enabled = 1  --Only Enabled Jobs 
and j.name like '%vip_report%'
ORDER   BY JobName,RunDateTime DESC 

 

B、SQL Server2005以上版本中:
SELECT  j.name AS 'JobName' , 
        s.step_id AS 'Step' , 
        s.step_name AS 'StepName' , 
        msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' , 
        (( run_duration / 10000 * 3600 + (run_duration / 100) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes' 
FROM    msdb.dbo.sysjobs j 
        INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id 
        INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id 
        AND s.step_id = h.step_id 
        AND h.step_id <> 0 
WHERE   j.enabled = 1   --Only Enabled Jobs 
ORDER  BY JobName,RunDateTime DESC 

 

4、修改指定做業(JOB)相關屬性值

一、修改做業開始執行日期和時間

update a

set a.active_start_date='20141010',a.active_start_time='082000'

from msdb.dbo.sysschedules a,msdb.dbo.sysjobschedules b,msdb.dbo.sysjobs c

where a.schedule_id=b.schedule_id

and b.job_id=c.job_id

and c.name=N'daily_pr_stat_test'

 

二、修改指定做業下次執行時間

update a
set next_run_time='114000'
from msdb.dbo.sysjobschedules a,msdb.dbo.sysjobs b
where a.job_id=b.job_id
and b.name=N'daily_pr_stat_test'

 

三、啓用做業

exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=1

 

四、禁用做業

exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=0

 

五、當即運行做業
exec msdb.dbo.sp_start_job N'daily_pr_per_test'

 

六、當即中止正在運行中的做業(可能致使不可預知的結果)
exec msdb.dbo.sp_stop_job N'daily_pr_per_test'

七、修改做業其餘參數

exec msdb..sp_update_job @job_name=N'daily_pr_stat_test'

 

更多相關參數請參考:http://technet.microsoft.com/zh-cn/magazine/ms188745(SQL.105).aspx 

相關文章
相關標籤/搜索