SQL Server 如何準確擷取Job的調度時間

來源:互聯網
上載者:User

下面是三種擷取Job調度時間的方法:

第一種:

 1 declare 
2 @jobid varchar(50),
3 @newjobid varchar(50)
4 select @jobid = replace(job_id, '-', '')
5 from msdb.dbo.sysjobs where name = 'create_snapshotjob'
6 select @jobid
7 set @newjobid = SUBSTRING(@jobid, 7, 2)+SUBSTRING(@jobid, 5, 2)+SUBSTRING(@jobid, 3, 2)+SUBSTRING(@jobid, 1, 2)
8 +SUBSTRING(@jobid, 11, 2)+SUBSTRING(@jobid, 9, 2)+SUBSTRING(@jobid, 15, 2)+SUBSTRING(@jobid, 13, 2)+SUBSTRING(@jobid, 17, 50)
9
10 select a.*, b.*
11 from sys.dm_exec_sessions a
12 inner join sys.dm_exec_requests b on b.session_id = a.session_id
13 where program_name like 'SQLAgent - TSQL JobStep (Job 0x'+@newjobid+'%'

第二種:

exec msdb.dbo.sp_help_job

第三種:

exec master.dbo.xp_sqlagent_enum_jobs 1, ''

根據執行的情況來觀察第一和第二種方法應該是在SQL Server服務內部的狀態擷取,第一種方法是獲得Job進程情況,而第二種未知。但通過觀察第二種和第一種的表現是基本一樣的。

 

 

是通過Job的執行過程中抓取的三種指令碼出來的情況,我們可以看到

第一種方法可以抓到一個Job執行的進程資訊。說明該Job正在執行,這裡執行的是一個CREATE DATABASE進程。

第二種方法可以看到當前Job的current_execution_status 為 1 是正在執行,同時 current_execution_step顯示執行步驟

第三種方法同第二種方法,顯示running為1是執行狀態,同時current step顯示執行步驟

這可以說明三種方法都可以捕獲到Job的執行情況,那麼我們在使用中會應用哪中方法呢?

 

上面這圖是Job執行快結束時捕獲的,我們可以看到目前Job還在執行,但是第一和第二種方法中顯示Job已經執行完成。而第三種方法可以看到JOB還在執行,但是Current step為0 說明沒有步驟在執行。

 

從上面的分析我們可以得出,第一種方法和第二種方法應該可以擷取到Job的執行步驟但是無法擷取整個JOb的當前準確狀態。而第三種方法可以擷取Job的每個步驟及整個Job的所有狀況。實際應用的時候可以根據情況來選擇方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.