0

我们正在使用 MS SCOM 来监控 ms sql 代理作业的结果。

目前,如果作业的任何步骤失败,我们会收到错误消息。

开发人员说这是错误的,只有在整个工作失败时我们才应该发出警报,即使某些步骤不起作用

好的

我用 1 步创建测试作业,这将导致错误。

测试工作

让我们找到工作和结果:

SELECT
    j.name,
    j.job_id,
    jh.step_id,
    jh.step_name,
    jh.run_status,

    CASE jh.run_status
        WHEN 0 THEN 'Failed'
        WHEN 1 THEN 'Succeeded'
        WHEN 2 THEN 'Retry'
        WHEN 3 THEN 'Canceled'
        WHEN 4 THEN 'Running'
        ELSE 'Unknown'
    END AS run_statusstring,
    j.enabled,
    jh.message,
    msdb.dbo.agent_datetime(
    CASE WHEN jh.run_date = 0 THEN NULL ELSE jh.run_date END,
    CASE WHEN jh.run_time = 0 THEN NULL ELSE jh.run_time END) AS last_runtime
FROM msdb.dbo.sysjobhistory jh
INNER JOIN (
    SELECT DISTINCT jh.job_id, MAX(jh.instance_id) instance_id
    FROM msdb.dbo.sysjobhistory jh
    WHERE jh.step_id != 0
    GROUP BY jh.job_id
) AS a
ON jh.job_id = a.job_id
    AND a.instance_id = jh.instance_id
INNER JOIN msdb.dbo.sysjobs AS j
ON jh.job_id = j.job_id

无论如何 run_status=0 (失败)

为什么?我不是 DBA,但逻辑在哪里?为什么“辞职……”不起作用?

4

1 回答 1

0

我遇到了同样的问题,发现一个步骤的 run_status (step_id <> 0) 被记录为失败,但作业本身的 run_status (step_id = 0) 被记录为成功,以防像你这样。

于 2017-05-28T18:55:25.083 回答