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