【问题标题】:The job failed the job was invoked by schedule 1016. The last step to run was step1作业失败 作业被调度 1016 调用。运行的最后一步是 step1
【发布时间】:2023-03-23 20:12:01
【问题描述】:

作业失败 作业被调度 1016 调用。运行的最后一步是 step1

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

【问题讨论】:

  • 看来,1016 不是错误代码,而是计划 ID。我想,您可以尝试检查作业日志以查看实际的错误消息
  • 在哪里可以找到工作日志?实际上我已经检查了服务集成目录,但是在报告中结果是成功的。
  • SQL Server 代理->作业->右键单击您的作业->查看历史记录

标签: sql-server ssis


【解决方案1】:

正如 cmets 所示,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 如果不为空,则表明我们已经设置了凭据代理,这些代理添加了另一层来识别包可能出错的位置。

如果此包从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2020-05-06
    • 2011-06-01
    • 2017-03-22
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多