正如 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