作业失败作业由计划 1016 调用。运行 的最后一步是步骤 1

The job failed the job was invoked by schedule 1016. The last step to run was step1

the job failed the job was invoked by schedule 1016. The last step to run was step1

当我尝试 运行 作业时收到一条失败消息,但是当我 运行 使用 SSIS 时,包成功 运行s。我已经搜索过 google 但我找不到与代码 1016 相同的错误。请帮助解决此问题。

如注释所示,1016 不是错误消息。相反,它是时间表的标识符。这就是为什么你不会找到关于它的其他问题。

让我们弄清楚失败的作业是什么以及它应该做什么。

使用 SSMS,连接到有问题的服务器并运行以下查询

SELECT
    SJ.name AS JobName
,   JS.step_id
,   JS.step_name
,   JS.subsystem
,   JS.command
,   JS.server
,   JS.proxy_id
,   JS.step_uid
,   SP.name AS proxy_name
,   C.credential_id
,   C.name AS credential_name
,   C.credential_identity
FROM
    msdb.dbo.sysjobschedules AS SJS
    INNER JOIN
        msdb.dbo.sysjobs AS SJ
        ON SJ.job_id = SJS.job_id
    INNER JOIN
        msdb.dbo.sysjobsteps AS JS
        ON JS.job_id = SJ.job_id
    LEFT OUTER JOIN
        msdb.dbo.sysproxies AS SP
        ON SP.proxy_id = JS.proxy_id
    LEFT OUTER JOIN
        msdb.sys.credentials AS C
        ON C.credential_id = SP.credential_id
    
WHERE
    EXISTS
(
    SELECT
        *
    FROM
        msdb.dbo.sysschedules AS SS
    WHERE
        SS.schedule_id = SJS.schedule_id
        AND SS.schedule_id = 1016
)
ORDER BY 1,2;

此查询将查找属于作业计划 ID 1016 成员的所有作业。作业可以共享一个计划,因此如果您发现列出了多个作业(第 1 列),则需要查看作业执行以找出失败的作业。

此查询将公开支持作业步骤定义的所有数据,因此您将查找 step_id = 1 的所有位置,因为您的错误消息表明 The last step to run was step1 除非那是step_name 的值然后对其进行过滤。

你指出 SSIS 包 运行 和你一样好,所以应该将命令列修补到你的问题中,因为它标识了工作在做什么,并且可以为“你”提供参考点运行打包。

除此之外,proxy_name、credential_name、credential_identity 如果不为 null,则表明我们已经使用了经过认证的代理,这增加了另一层来识别包可能出错的地方。

如果此包从 SSISDB 执行,那么您也需要将错误日志转储到您的问题中。

-- Find all messages associated to the last failing run
SELECT
    OM.operation_message_id
,   OM.operation_id
,   OM.message_time
,   OM.message_type
,   OM.message_source_type
,   OM.message
FROM
    SSISDB.catalog.operation_messages AS OM
WHERE
    EXISTS    
    (  
        -- Find the last failing operation
        -- lazy assumption that biggest operation
        -- id is last. Could be incorrect if a long
        -- running process fails after a quick process
        -- has also failed
        SELECT 
            MAX(OMI.operation_id)
        FROM
            SSISDB.catalog.operation_messages AS OMI
        WHERE
            OMI.message_type = 120
            AND OM.operation_id = OMI.operation_id
    );

您可以使用本机报告(所有执行)来查找包的失败执行。第一列,ID 是 operation_id,所以你可以用基本的 OM.operation_id = 10 替换 EXISTS 子句,如果你只想要错误,过滤 AND message_type = 120