如何在完成执行后检查SSIS包作业结果?

TTC*_*TCG 12 sql-server ssis sql-server-2008

我有一个SSIS包,可以将数据导入SQL Server 2008数据库.我已在SQL Server代理中设置计划作业以运行该程序包.当我查看历史记录时,我只能看到作业是否成功运行.除此之外,我看不到其他消息.

我想知道每当执行作业时导入的记录数.我该如何监控?我应该使用SSIS包中的其他组件还是在SQL Server代理作业设置中设置一些配置?

我在SQL Server代理作业设置中找到了一些日志工具,但我不确定它是否能满足我的要求.

小智 21

如果您只是想知道正在处理的列并且对该信息不感兴趣以供进一步使用,一种可能的选择是使用SSIS日志记录功能.以下是它对数据流任务的工作原理.

  1. 单击SSIS包.
  2. 在菜单上,选择SSIS - > Logging ...
  3. 在"配置SSIS日志:"对话框中,选择提供程序类型,然后单击"添加".我为此示例选择了SQL Server.选中"名称"复选框,并在"配置"列下提供数据源.这里SQLServer是连接管理器的名称.SSIS将在您选择的数据库中创建名为dbo.sysssislog的表和存储过程dbo.sp_ssis_addlogentry.请参阅下面的截图#1.
  4. 如果需要处理的行,请选中OnInformation复选框.在示例中,包已成功执行,因此在OnInformation下找到了日志记录.您可能需要根据您的要求微调此事件选择.请参阅下面的截屏#2.
  5. 以下是数据流任务中的示例包执行.请参阅下面的截屏#3.
  6. 以下是日志表dbo.sysssislog的示例输出.我只显示了列id消息.表中还有许多其他列.在查询中,我仅针对名为" Package1 " 的包和事件" OnInformation " 过滤输出.您可以注意到具有ID 7,14和15的记录包含已处理的行.请参阅下面的截屏#4.

希望有所帮助.

截图#1:

记录

截图#2:

活动

截图#3:

执行

截图#4:

数据


小智 5

使用以下过程获取带有执行 ID 的 SSIS 错误

CREATE PROCEDURE [dbo].[get_ssis_status] @EXECUTION_ID INT\n
AS
BEGIN
  SELECT o.operation_id EXECUTION_ID
    ,convert(datetimeoffset,OM.message_time,109) TIME
    ,D.message_source_desc ERROR_SOURCE
    ,OM.message ERROR_MESSAGE
    ,CASE ex.STATUS
        WHEN 4 THEN 'Package Failed'
        WHEN 7 THEN CASE EM.message_type 
            WHEN 120 THEN 'package failed' 
            WHEN 130 THEN 'package failed' ELSE 'Package Succeed'END
        END AS STATUS
FROM SSISDB.CATALOG.operation_messages AS OM
INNER JOIN SSISDB.CATALOG.operations AS O ON O.operation_id = OM.operation_id
INNER JOIN SSISDB.CATALOG.executions AS EX ON o.operation_id = ex.execution_id
INNER JOIN (VALUES (- 1,'Unknown'),(120,'Error'),(110,'Warning'),(130,'TaskFailed')) EM(message_type, message_desc) ON EM.message_type = OM.message_type
INNER JOIN (VALUES 
 (10,'Entry APIs, such as T-SQL and CLR Stored procedures')
,(20,'External process used to run package (ISServerExec.exe)')
,(30,'Package-level objects')
,(40,'Control Flow tasks')
,(50,'Control Flow containers')
,(60,'Data Flow task')
    ) D(message_source_type, message_source_desc) ON D.message_source_type = OM.message_source_type
WHERE ex.execution_id = @EXECUTION_ID
AND OM.message_type IN (120,130,-1);
END
Run Code Online (Sandbox Code Playgroud)