Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SSIS包作业完成执行后检查其结果?_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

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

Sql server 如何在SSIS包作业完成执行后检查其结果?,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,我有一个SSIS包,它将数据导入SQL Server 2008数据库。我已在SQL Server代理中设置了计划作业以运行该包。当我查看历史记录时,我只能看到作业是否成功运行。除此之外,我看不到其他消息 我想知道每次执行作业时会导入多少记录。我该如何监控?我应该使用SSIS包中的其他组件,还是在SQL Server代理作业设置中设置一些配置 我在SQL Server代理作业设置中发现了一些日志记录功能,但我不确定它是否能够满足我的要求。如果您只是想了解正在处理的列,而对进一步使用的信息不感兴趣,

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

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


我在SQL Server代理作业设置中发现了一些日志记录功能,但我不确定它是否能够满足我的要求。

如果您只是想了解正在处理的列,而对进一步使用的信息不感兴趣,那么一个可能的选择是使用SSIS日志记录功能。下面是它如何用于数据流任务

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

截图1:

截图2:

截图3:

截图4:


当SQL Server作业历史记录不显示SSIS包的输出时,还有另一种方法:使用DTEXEC命令行

好处:这种方法将工作的产出放在任何其他支持它的人都希望看到的地方:在工作历史中。 大型软件包的缺点:如果您有一个很长的SSIS软件包,其中包含大量任务或组件以及大量输出,那么作业历史记录会将软件包输出拆分为多行作业历史记录,从而使上一个答案日志记录表中的方法更易于阅读

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

命令行示例:

DTExec /DTS "\MSDB\myPkgName" /DECRYPT pkgPass /MAXCONCURRENT " -1 " /CHECKPOINTING OFF 
请注意,例如,如果SSIS包需要32位执行true才能导出到Excel,则通过完全限定DTEXEC实用程序,在程序文件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包是使用项目部署模型(从SQL Server 2012开始可用)而不是旧的包部署模型放置在SSIDB中的,请将/DTS替换为/ISSERVER

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

最后,考虑您的作业步骤的运行情况:如果您的作业步骤已经运行为已设置为代理,在SQLServer集成服务包的作业步骤上,那么您已经使该代理对子系统SQLServer集成服务包激活。现在,要执行上述命令行,请检查代理的属性,并确保它对子系统操作系统CmdExec也是活动的


MSDN参考:

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


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

使用以下过程获取具有执行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

这正是我想要的;