zoukankan      html  css  js  c++  java
  • 【译】第十一篇 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,WORKAdministrator,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,WORKAdministrator,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
    View Code

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

  • 相关阅读:
    NP数据库工具安装链接博客
    javascript mouseup , mousedown 和 拖拽事件 drag冲突的解决办法
    vscode 开启html代码自动补全
    spring 测试程序运行时间工具类StopWatch
    rabbmitmq 通过docker 方式启动无法打开管理界面的问题
    linux 测试端口开放工具 nmap
    html5--video 无法自动播放
    antd hooks --Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
    C#发送腾讯企业邮箱
    web安全漏洞简单总结
  • 原文地址:https://www.cnblogs.com/Uest/p/4885544.html
Copyright © 2011-2022 走看看