第十一篇 Integration Services:日志记录

本篇文章是Integration Services系列的第十一篇,详细内容请参考原文



简介
在前一篇,我们讨论了事件行为。我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式。
在这一篇,我们会配置SSIS内置日志记录。我们会演示简单和高级日志配置,保存和查看日志配置,生成自定义日志消息。
SSIS任务事件
打开Precedence.dtsx包。你的控制流面板应该如图11.1所示:

图11.1
在第九篇和第十篇,我们关注在序列容器1.我们在Script Task 4和序列容器1上创建了OnError事件处理程序——我们描述为事件"监听器"。在第十篇,我们为Precedence.dtsx包添加一个OnError事件处理程序扩展了这个模式。对于每一个OnError事件处理程序,我们添加一个脚本任务来显示包含下面SSIS变量的消息对话框:
->System::ErrorCode
->System::ErrorDescription
->System::SourceName
在我们开始测试前,让我们验证和/或修改之前的Precedence.dtsx包的某些设置。首先,点击Precedence.dtsx包控制流的空白区并按F4显示属性。修改DisableEventHandlers属性为False,如图11.2所示:

图11.2
在我们做更多修改前,通过按F5在BIDS调试器下执行Precedence.dtsx包。对于"Succeed Script Task 2?"的选择不会影响演示的目的,但是现在以及这篇文章剩余部分我们会选择"是"按钮(图11.3)引起 Script Task 2成功。

图11.3
当提示"Succeed Script Task 4?"时,选择否按钮从Script Task 4引起一个错误事件:

图11.4
当Script Task 4产生一个错误事件,在第九篇中配置的OnError事件处理程序监听错误事件,然后执行,显示类似图11.5所示的消息对话框:

图11.5
但是错误事件并不会在这里停止,它会继续向上层冒泡,将执行结果传送到下一级:序列容器1,它包含Script Task 4.我们可以从序列容器1配置的OnError事件处理程序上看到类似图11.6的消息对话框:

图11.6
同样,错误继续冒泡到下一级:Precedence.dtsx,它包含序列容器1.我们可以从Precedence包配置的OnError事件处理程序上看到类似图11.7的消息对话框:

图11.7
一旦我们接受这个消息对话框,另一个显示Script Task 3完成的对话框会出现。接受Script Task 3的消息,让Precedence.dtsx包完成执行,最终如图10.8所示:

图10.8
事件监听者
SSIS中的任务、容器以及SSIS包对象被当作可执行文件。可执行文件产生/引起事件。SSIS事件处理程序监听并响应由任务和容器引起的事件。
SSIS事件以消息形式在可执行文件中传送。这些消息按照规则传送。其中一条规则是:消息从低级传送到高级。
SSIS日志也是监听者。
配置SSIS日志记录
为了配置SSIS日志记录,点击SSIS,在下拉菜单上选择日志记录,如图11.9所示:

图11.9
配置SSIS日志窗口显示如图11.10所示:

图11.10
可用的日志提供程序类型有:
->用于Windows事件日志的SSIS日志提供程序
->用于文本文件的SSIS日志提供程序
->用于XML文件的SSIS日志提供程序
->用于SQL Server的SSIS日志提供程序
->用于SQL Server Profiler的SSIS日志提供程序
选择文本文件提供程序,如图11.11所示:

图11.11
一旦选择"用于文本文件的SSIS日志提供程序",点击添加按钮为Precedence.dtsx包添加一个文件文件日志,如图11.12所示:

图11.12
在配置SSIS日志窗口底部有一条重要的提示。它告诉我们接下来需要做什么,如图11.13所示:

图11.13
正如图11.13显示的消息说明,下一步是在容器树视图中选择复选框启用日志记录。为Precedence包启用SSIS日志记录功能,如图11.14所示:

图11.14
现在我们可以配置日志本身了。第一件我们要做的是为包(在容器树视图选择的)分配日志。我们通过日志前的复选框分配日志,如图11.15所示:

图11.15
一旦日志复制框勾选,就可以编辑名称和说明属性。配置属性是必须的。点击配置列的下拉菜单,选择"新建连接…",如图11.16所示:

图11.16
连接管理器会创建一个新的文件连接管理器,并打开文件连接管理器编辑器,如图11.17所示:

图11.17
这个文件连接管理器用于配置文本文件日志的文件。在使用类型下拉列表选择"创建文件"。日志文件并不是每次SSIS包执行都会创建,只有当它不存在时才会创建。如果日志文件存在,日志数据会追加到后面。
当选择文件窗口出现,导航到My_First_SSIS_Project解决方案文件夹并创建一个名为"log"的新文件夹,如图11.18所示:

图11.18
打开新文件夹,键入文件名称MyLog.csv,如图11.19所示:

图11.19
点击"打开"按钮完成文件配置,如图11.20所示:

图11.20
点击确定按钮完成文件连接管理器配置。你的连接管理器页签应该如图11.21所示:

图11.21
我们已经为Precedence.dtsx包配置了一个文本文件日志。在BIDS调试器下执行包,然后用记录本打开MyLog.csv
记住,SSIS日志是能够监听事件的监听者。默认,日志监听者监听PackageStart和PackageEnd事件,如图11.22所示:

图11.22
添加事件
点击SSIS,在下拉菜单选择日志记录。当打开配置SSIS日志窗口,点击详细信息页签。这个列表看起来很熟悉。它就是我们在第九篇遇到的事件列表(图9.16)。如果你记得的话,所有的可执行文件引发事件。监听者——SSIS事件处理程序和SSIS日志记录,访问SSIS包中可执行文件收集的事件。如果我们往SSIS控制流添加不同的任务,我们就会在这个列表及事件处理程序列表看到额外的事件。
选择OnError和OnInformation事件,如图11.23所示:

图11.23
在BIDS调试器下执行Precedence.dtsx,Script Task 2成功,Script Task 4失败。打开MyLog.csv查看内容,如图11.24所示:

图11.24
跟随在最初PackageEnd事件之后的第一个条目是PackageStart事件,证明了日志文件不存在时创建,存在时追加。接下来三行是OnError事件。这里我们看到另一个事件冒泡现象,第一条OnError事件记录由Script Task 4引发,接着是序列容器1的OnError事件,然后是Precedence.dtsx包的OnError事件。最后事件记录是另一个PackageEnd事件。
高级日志配置
打开Precedence.dtsx包的配置日志窗口,点击详细信息页签。在详细信息页签的底部有三个按钮:高级、加载和保存,如图11.25所示:

图11.25
点击高级按钮显示SSIS日志记录信息/领域。图11.26显示了我们之前选择的OnError和OnInformation事件的所有信息/领域。

图11.26
让我们做些修改。去掉OnError和OnInformation事件的ExecutionID列。去掉OnError事件的DataBytes列,OnInformation事件的SourceID列。你的日志记录配置高级页面应该如图11.27所示:

图11.27
在我们离开高级页面前,点击保存按钮。当显示另存为对话框时,在文件名文本框中键入MyLogConfig,如图11.28所示:

图11.28
点击保存按钮将日志记录高级配置存储到XML文件中。为了演示它如何工作,清除日志记录高级配置如图11.29所示:

图11.29
点击加载按钮。当显示打开对话框,选择MyLogConfig文件并点击打开按钮,如图11.30所示:

图11.30
注意日志记录高级配置恢复为选择保存时的样子(图11.26)。You can use this functionality to encourage developers in an enterprise to collect similar logging fields from SSIS’ built-in logging.
点击确定按钮关闭配置SSIS日志窗口。
Raising Custom Events On-Demand, Part 1
SSIS自动产生的日志记录消息非常少。但是你可以手动增加被日志监听的事件,也就是生成自定义日志消息。
为了演示,打开Script Task 3的编辑器点击编辑脚本按钮。Public Sub Main()中的代码应该类似于代码11.1:

    Public Sub Main()
        Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString
        MsgBox(sTaskName & " completed.")
        Dts.TaskResult = ScriptResults.Success
    End Sub

代码11.1
用代码11.2编辑代码:

    Public Sub Main()
        Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString
        Dim sMsg As String = sTaskName & " completed."

        Dts.Events.FireInformation(101, sTaskName, sMsg, "", 0, True)
        MsgBox(sMsg)

        Dts.TaskResult = ScriptResults.Success
    End Sub

代码11.2
首先,我们添加一个名为sMsg字符串类型的变量,并将它的值分配为sTaskName & " completed.然后,我们添加代码手动引发一个Information事件:Dts.Events.FireInformation(101,sTaskName,sMsg,"",0,True)。Dts.Events对象能够引发很多不同类型的事件,包括我们当前日志配置在监听的Error和Information事件。FireInformation有六个参数:informationCode (Integer),subComponent(String),description(String),helpFile(String),helpContext (Integer),and fireAgain(Boolean).InformationCode用于分组信息。我使用子组件来识别/区分任务事件。Description是我们想要记录的信息。HelpFile和helpContext用于链接到帮助主题。我从来不配置这些主题,因此我也不知道它们如何/是否工作。目前我所知道的是,FireAgain已被弃用——我把它设置为默认值True.脚本中的最后一处修改是用sMsg变量代替MsgBox语句。
关闭ssisscript编辑器,点击确定按钮关闭脚本任务编辑器。在BIDS调试器下执行Precedence.dtsx包,Script Task 2成功,Script Task 4失败。接受Script Task 3的完成消息框。
打开日志文件检查最新的消息记录,如图11.31所示:

图11.31
注意OnInformation事件也会冒泡,从Script Task 3到序列容器1,然后到Precedence.dtsx包。Script Task 3的OnInformation事件日志条目的完整文本如下:
OnInformation,WORK,WORK\Administrator,Script Task 3,,,2015/10/16 12:20:20,2015/10/16 12:20:20,101,0x,Script Task 3 completed.
Raising Custom Events On-Demand, Part 2
如果我们检查日志文件中的所有Error消息,我们看到类似下面的消息:
OnError,WORK,WORK\Administrator,Script Task 4,{223ec2c7-6a62-4faf-8069-48202668655c},,2015/10/16 12:20:18,2015/10/16 12:20:18,-1001,0x,Script Task 4 failed!
和Information事件相似,我们可以增加自定义Error事件。为了演示,打开Script Task 4的编辑器并点击编辑脚本按钮。我们看到这个操作已经在Script Task 4的Public Sub Main()代码中,如代码11.3所示:

    Public Sub Main()

        Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString

        Dim iResponse As Integer
        iResponse = MsgBox("Succeed " & sTaskName & "?", _
                           MsgBoxStyle.YesNo + MsgBoxStyle.Question, _
                           sTaskName & " Success Question")
        If iResponse = vbYes Then
            Dts.TaskResult = ScriptResults.Success
        Else
            ‘Dts.TaskResult = ScriptResults.Failure
            Dts.Events.FireError(-1001, "Script Task 4", _
                                 "Script Task 4 failed!", "", 0)
        End If

    End Sub

代码11.3
日志文件中的OnError消息就是由代码11.3中的Dts.Events.FireError方法产生的。
总结
在这一篇,我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息。

时间: 2024-10-29 19:06:18

第十一篇 Integration Services:日志记录的相关文章

第十三篇 Integration Services:SSIS变量

本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将升级我们的解决方案为SQL Server 2012 Integration Services,演示SSIS变量,变量配置和表达式管理动态值.在前面的练习中我们已经使用过变量,但我们没有深入学习,这一篇,我们将关注SSIS变量.…………一旦安装好,你可以设置主题颜色,工具->选项->环境->常

第五篇 Integration Services:增量加载-Deleting Rows

本篇文章是Integration Services系列的第五篇,详细内容请参考原文. 在上一篇你学习了如何将更新从源传送到目标.你同样学习了使用基于集合的更新优化这项功能.回顾增量加载记住,在SSIS增量加载有三个使用案例:1.New rows-add rows to the destination that have been added to the source since the previous load.2.Updated rows-update rows in the destin

第四篇 Integration Services:增量加载-Updating Rows

本篇文章是Integration Services系列的第四篇,详细内容请参考原文. 回顾增量加载记住,在SSIS增量加载有三个使用案例:1.New rows-add rows to the destination that have been added to the source since the previous load.2.Updated rows-update rows in the destination that have been updated in the source

第十五篇 Integration Services:SSIS参数

本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到SSIS 2012.在这一篇,我们将探讨SSIS变量的姊妹:SSIS参数.我们将展示参数配置,通过包参数管理动态属性值,以及在SSIS包执行期间参数是如何配置和使用的.首先在SSDT-BI打开转换过的My_First_SSIS_Project,如图15.1所示:图15.1My_First_SSIS_P

第十篇 Integration Services:高级事件行为

本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining methods of task execution state management using the MaximumErrorCount and ForceExecutionResult properties.我们还学习了SSIS控制流任务错误.事件处理程序和容器之间的关系.这一篇我们重点关注事件的行为.在

第九篇 Integration Services:控制流任务错误

本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性.我们检查.演示并测试优先约束赋值为"成功"."完成"."失败"时对工作流的影响.我们学习了SSIS变量和表达式,并将它们应用到优先约束.这一篇,we introduce fault tolerance by examinin

第七篇 Integration Services:中级工作流管理

本篇文章是Integration Services系列的第七篇,详细内容请参考原文. 简介在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性.这一篇我们将检查.演示并测试优先约束赋值为"成功"."完成"."失败"时对工作流的影响.约束赋值如果你按照前一篇的步骤操作过,打开My_First_SSIS_Project解决方案下的Precedence.dtsx

第十四篇 Integration Services:项目转换

本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业智能工具(SSDT-BI)或Visual Studio 2012将我们的第一个SSIS项目转换为SSIS 2012.为什么你想升级我们的SSIS项目到2012?你可能想使用SSIS 2012中的新特性.你可能还希望利用SSIS 2012目录.要使用目录,你的项目必须遵循项目部署模型,我们也将在这篇文

第一篇 Integration Services:SSIS是什么

本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取.转换和加载(ETL)数据,以任何你能想到的编程方式更改数据.你可以用SSIS做下面操作:->执行ETL(提取.转换.加载)操作->传输数据->复制数据库对象->执行FTP操作->处理文件"我之前从来没用过SSIS…"你确定你从来没有使用过?是否对下面界面感到