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

时间:2011-05-25 10:11:46

标签: sql-server sql-server-2008 ssis

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

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

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

5 个答案:

答案 0 :(得分:21)

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

  1. 点击SSIS包。
  2. 在菜单上,选择 SSIS - >记录...
  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
  7. 希望有所帮助。

    屏幕截图#1

    Logging

    屏幕截图#2

    Events

    屏幕截图#3

    Execution

    屏幕截图#4

    Data

答案 1 :(得分:1)

以下是SQL Server作业历史记录未显示SSIS包输出的另一种方法:使用DTEXEC命令行。

(上行方面:这种方法将工作的输出放在支持它的任何其他人期望找到它的位置:在工作历史中。
大包装的缺点:如果你有一个很长的SSIS包,有很多任务或组件,以及大量的输出,那么工作历史将把包装输出分成多行作业历史,使得方法在上一个答案中 - 记录到桌子 - 更容易阅读。)

在作业的查看历史记录中显示SSIS包输出:
(1)将作业步骤从“SQL Server Integration Services包”类型更改为“操作系统(CmdExec)”,
(2)使用DTEXEC命令行来执行包。

命令行示例:

DTExec /DTS "\MSDB\myPkgName" /DECRYPT pkgPass /MAXCONCURRENT " -1 " /CHECKPOINTING OFF 

请注意,如果SSIS包需要 32-BIT 执行(例如,对于导出到Excel,则为true),然后通过完全限定它来使用“Program Files(x86)”中的DTEXEC实用程序。例如,SQL Server应用程序安装在“E:”驱动器上,以及使用SQL Server 2014的位置:

"E:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe" /DTS "\MSDB\myPkgName" /DECRYPT pkgPass /MAXCONCURRENT " -1 " /CHECKPOINTING OFF

如果您的SSIS包在文件系统中(作为“.dtsx”文件),则将“/ DTS”替换为“/ FILE”。

如果您的SSIS包放在SSISDB中(使用“项目部署模型”,从SQL Server 2012开始,而不是旧的“软件包部署模型”),则将“/ DTS”替换为“/ ISSERVER” ”。

接下来,进入作业步骤的“高级”页面,并确保选中“包含历史记录中的步骤输出”框。

最后,请考虑您的工作步骤“运行方式”:如果您的作业步骤“运行方式”已设置为代理,在“SQL Server Integration Services包”类型的作业步骤上,则您已将该代理激活为子系统“SQL Server Integration Services Package”。现在,要执行上述命令行,请检查代理的属性,并确保它对子系统“操作系统(CmdExec)”也是活动的。

MSDN参考:SSIS Output on Sql Agent history

答案 2 :(得分:1)

如果已将软件包部署到数据库的Integration Services目录(而不是从文件系统加载),则可以轻松获得详细的报告。

在SQL Server Management Studio中打开目录节点,右键单击包名称,然后选择Reports |标准报告|所有执行并查看有关作业及其子组件的每个步骤的详细信息,包括导入的记录。

答案 3 :(得分:1)

使用以下过程获取执行ID

的SSIS错误
Select DATE_TRUNC(DATE(date_create), MONTH) as month, 
    sum(amount) as amount_m 
from table
GROUP BY 1

答案 4 :(得分:-3)

如果使用执行SQL任务插入行,则可以使用@@ ROWCOUNT变量获取记录计数。然后你应该把它写在某个地方以便稍后阅读报告。