SSIS自定义日志记录最佳实践

时间:2013-04-22 07:50:04

标签: ssis

我想知道实现执行SQL任务日志记录的最佳方法是什么。例如,对于我的每个Execute SQL Task组件,我想记录以下内容:

1)SQL任务的描述。 2)SQL任务中使用的SQL语句。 3)SQL语句的结果。 SQL语句返回标量值。 4)正在创建的SSIS的作业运行ID是SSIS创建的Operation_Id。

目前,这就是我实施它的方式,这是非常重复的。

1)对于每个执行SQL任务(让我们称之为mySQLTask),我在mySQLTask的Post-Execute事件中创建另一个名为“Log Result”的执行SQL任务。 2)我创建一个名为Log_Result的存储过程,该过程从“日志结果”执行SQL任务执行。 3)然后我从mySQLTask复制SQL语句并将其作为硬编码参数粘贴到存储过程参数。例如,在SQL语句属性的“日志结果”SQL任务中...“EXEC Log_Result?,?,'SELECT COUNT(*)FROM TABLE',?

有没有办法可以动态地从mySQLTask中检索SQL语句?是否有更好的方法来做到这一点?

我还在Logging功能中的ExecuteSQLExecutingQuery选项的内置日志记录中探索了SSIS。它给了我执行的SQL语句,但我也想跟踪结果。

感谢。

1 个答案:

答案 0 :(得分:0)

我高度推荐这本书及其中包含的登录框架:

Microsoft SQL Server 2008集成服务:问题,设计,解决方案

ISBN: 978-0-470-52576-0

如果我正确地理解了你的问题,我会说它完全符合你的要求。 Code download link here.

如果我正确理解了您的问题,我会说如果您从具有SQL Server配置类型的程序包配置中配置执行SQL任务SQLStatement属性,它可用于执行您所描述的操作。

这将允许您将SQL语句保存在SQL Server中的一个表中,您可以查询并连接到包含每个Package Task的日志的其他表。

设置非常简单且相当强大。作者非常出色地指导您逐步完成这一过程。你需要花一天时间才能搞定它。

记录执行SQL任务的标量结果将是对SSIS PDS框架的增强。但我不会过分担心:应该很好地适应开箱即用的PackageTaskLog表。我在下面提供了PackageTaskLog脚本供您参考。

CREATE TABLE [adm].[PackageTaskLog](
    [PackageTaskLogID] [int] IDENTITY(1,1) NOT NULL,
    [PackageLogID] [int] NOT NULL,
    [SourceName] [varchar](255) NOT NULL,
    [SourceID] [uniqueidentifier] NOT NULL,
    [StartDateTime] [datetime] NOT NULL,
    [EndDateTime] [datetime] NULL,
 CONSTRAINT [PK_PackageTaskLog] PRIMARY KEY CLUSTERED 
(
    [PackageTaskLogID] ASC
)