Sql-Server
找工作打電話給另一個工作
我們有一項工作沒有計劃執行,但被我們懷疑是另一項工作所啟動。沒有作業歷史記錄,但它確實出現在錯誤日誌中。我們如何才能知道這是否被另一個工作呼叫?我知道我們可以使用 sp_start_job 在作業步驟中立即呼叫作業,但是,如果是這種情況,我們如何找到它?
而且,為什麼執行的工作沒有任何歷史記錄?
Error log entry: 2017-05-01 10:01:50.40 spid6s SPID: 131 ECID: 0 Statement Type: ALTER INDEX Line #: 1 2017-05-01 10:01:50.40 spid6s Input Buf: Language Event: EXECUTE [msdb]. dbo.IndexOptimize @Databases = 'Database1,Database2'
我們如何才能知道這是否被另一個工作呼叫?
在您的所有工作步驟中搜尋其他工作執行的工作名稱字元串(至少這是您所懷疑的)。此查詢來自此網站。
USE [msdb] GO SELECT j.job_id, s.srvname, j.name, js.step_id, js.command, j.enabled FROM dbo.sysjobs j JOIN dbo.sysjobsteps js ON js.job_id = j.job_id JOIN master.dbo.sysservers s ON s.srvid = j.originating_server_id WHERE js.command LIKE N'%KEYWORD_SEARCH%' GO
為什麼執行的工作沒有任何歷史記錄?
只是為了回答您的基本問題,如果您有工作正在執行
sp_start_job
,您可以通過查看msdb.dbo.sysjobsteps
系統表來找到它。像這樣的東西會給你一個執行sp_start_job
SP 的所有作業和包含它的命令的列表。SELECT sysjobs.name, sysjobsteps.* FROM msdb.dbo.sysjobsteps JOIN msdb.dbo.sysjobs ON sysjobsteps.job_id = sysjobs.job_id WHERE sysjobsteps.command like '%sp_start_job%'
不幸的是,我不知道任何歷史可以告訴您實際呼叫工作的位置。