找工作叫另一个工作

Mar*_*vel 5 sql-server-2008 sql-server jobs

我们有一项工作没有计划运行,但我们怀疑是另一项工作启动了它。没有作业历史记录,但它确实出现在错误日志中。我们如何知道这是否正在被另一个工作调用?我知道我们可以使用 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'
Run Code Online (Sandbox Code Playgroud)

Sql*_*ide 3

我们如何知道这是否被其他工作调用?

在所有作业步骤中搜索由其他作业运行的具有作业名称的字符串(至少这是您所怀疑的)。该查询来自网站。

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
Run Code Online (Sandbox Code Playgroud)

为什么运行的作业没有任何历史记录?

取决于您的工作历史记录的设置方式。请参阅我的博客文章这里是另一个很好的参考。