Sql-Server

找工作打電話給另一個工作

  • January 16, 2018

我們有一項工作沒有計劃執行,但被我們懷疑是另一項工作所啟動。沒有作業歷史記錄,但它確實出現在錯誤日誌中。我們如何才能知道這是否被另一個工作呼叫?我知道我們可以使用 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_jobSP 的所有作業和包含它的命令的列表。

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%'

不幸的是,我不知道任何歷史可以告訴您實際呼叫工作的位置。

引用自:https://dba.stackexchange.com/questions/172443