可能的选项:
您需要利用Logging
SSIS 中的功能。它允许您配置要为其捕获消息的事件。我通常更喜欢日志OnWarning
并OnError
跟踪包中出现的所有警告和错误消息。您有各种提供程序来保存日志记录数据。我更喜欢使用 SQL Server,以便我可以查询日志记录信息。
SSIS 2012 中显示的日志记录选项:
Business Intelligence Development Studio (BIDS)
如果您正在 SSIS 2005 - 2008 R2SQL Server Data Tools (SSDT)
中开发包或正在 SSIS 2012 中开发包,则要启用包中的日志记录,您需要单击该包。
单击SSIS
菜单,然后单击Logging...
您将看到配置 SSIS 日志对话框。
在左侧,您可以检查包或单个任务以记录事件数据。
在Providers and Logs选项卡上,您可以选择一个适当的提供程序来保存日志信息。下面的屏幕截图显示事件信息是使用连接管理器在 SQL Server 数据库中捕获的OLEDB_PracticeDB
。
在详细信息选项卡上,您可以选择要捕获的事件。下面的屏幕截图显示我正在捕获以下事件。
感谢@William Todd Salzman推荐OnTaskFailed
活动
样品包装图:
假设我们有一个名为SO_15004109.dtsx
Data Flow Task和Script Task的包。数据流任务只是一个内部没有组件的虚拟对象。
脚本任务在 Main 方法中有以下代码来触发自定义信息、警告和错误消息,因此我们可以观察它是如何在日志数据源中捕获的。该代码是为 SSIS 2012 编写的,因此您可能需要为 SSIS 2005 更改它。我之所以选择VB.NET
不是,是因为您已在sql-server-2005C#
下标记了此问题,并且 SSIS 2005 仅支持 VB.NET。
用于 SSIS 2005 及更高版本的 VB.NET 中的脚本任务代码。
#Region "Imports"
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
#End Region
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Public Sub Main()
Dim fireAgain As Boolean = False
Dts.Events.FireInformation(101, "Custom Script Information", "This is a test information message.", String.Empty, 0, fireAgain)
Dts.Events.FireWarning(201, "Custom Script Warning", "This is a test warning message.", String.Empty, 0)
Dts.Events.FireError(201, "Custom Script Error", "This is a test error message.", String.Empty, 0)
Dts.TaskResult = ScriptResults.Success
End Sub
#Region "ScriptResults declaration"
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
#End Region
End Class
如果我们执行包,它将失败,因为我们在Script Task中引发了错误。
如果您导航到记录错误的数据源,您会注意到如果您选择 SQL Server 日志记录提供程序,SSIS 会创建一个表来记录信息。下表列出了 SSIS 在选择作为日志提供程序的 SQL Server 数据库中创建的日志记录表。
SSIS Version Log table name Table type
-------------- ---------------- ----------
SSIS 2005 dbo.sysdtslog90 User
SSIS 2008 dbo.sysdtslog100 User
SSIS 2008 R2 dbo.sysssislog System
SSIS 2012 dbo.sysssislog System
在数据库中执行以下查询以查看此示例包捕获的事件。您会注意到一些消息两次,因为每个容器和任务都记录了这些事件。之所以命名该表,是dbo.sysssislog
因为该包是在 SSIS 2012 中创建的。
select id, event, source, message from dbo.sysssislog;
个人日志记录经验:
我在查看日志记录错误消息以了解出了什么问题方面取得了相当大的成功。在我看来,不建议在生产环境中调试包。但是,最好捕获日志事件。
当我在 SSIS 2005 和 2008 工作时,我创建了基于 SSRS 的报告,该报告查询日志表以生成作业执行的每日报告并将 PDF 附件发送给感兴趣的人。
SSIS 2012 中的情况有所改进,该工具具有内置报告功能,集成服务目录可创建名为SSIDB
.