介绍

在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型.

本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息.

More About SSIS Task Events

打开 Precedence.dtsx 包,你 Control Flow 界面应该显示如下:

图 1

在测试之前,我们先来验证或修改一些设置.首先点击  Precedence.dtsx 包 Control Flow界面的空白处,然后在属性面板里面把DisableEventHandlers的值改为False :

图 2

事件监听 Event Listeners

任务(Tasks)和容器(containers)在SSIS中也被成为可执行程序(executables).  可执行程序 Executables 引发一个事件. SSIS 事件处理监听并响应任务和容器触发的事件.

SSIS事件信息在可执行文件中传送. 信息传送遵循规则. 首要的就是: 信息流从底部向高流动.

SSIS 日志也是如此.

配置SSIS 日志 Configuring SSIS Logging

要配置 SSIS logging, 点击SSIS 下拉菜单,然后点击 Logging 项.:


图 9

Configure SSIS Logs 窗口显示如下:


图 10

提供的日志类型如下:

  • Windows Event Log
  • Text Files
  • XML Files
  • SQL Server
  • SQL Server Profiler


图 11

选择“SSIS log provider for Text files”然后点击Add 按钮添加文本文件日志到Precedence.dtsx SSIS 包:


图 12

注意底部的一个框,会提示你接下来应该做什么


图 13

如上所属, 下一步选择 Containers树形视图的复选框来启用日志记录. 启用 Precedence 包的日志记录.显示如下:


图 14

我们现在可以配置日志本身,我们要做的第一件事情是给已在Cointainers 视图里面选中的包分配一个日志.  直接复选刚才添加的那个日志即可:


图 15

日志选中以后你就可以修改Description 属性, 其中 Configuration 属性也是必须的. 点击下拉框选择 “<New connection…>”

图 16

一个新的 File Connection Manager 会被创建,并且打开:


图 17

在Usage type 选择 “Create file” , 如果文件不存在就会创建日志文件,如果日志文件存在,那么数据会被添加.

随后在My_First_SSIS_Project 解决方案目录创建一个新的”log”目录 :

图 18

在编辑器中选择Browsing,然后文件名写“MyLog.csv” :


图 19

点击Open 按钮配置如下:


图 20

点击OK按钮完成 File Connection Manager 的配置,在 Connection Managers 标签下面你可以看到刚创建的连接:


图 21

现在我们执行包看看效果. 打开 MyLog.csv .

记住. SSIS log会监听 事件,默认情况下. 日志监听包PackageStart 和 PackageEnd 事件. :

图 22

添加日志Adding Events

再次打开日志配置器. 点击 Details 标签.选择  OnError 和 OnInformation 事件:


图 23

再次执行包 Script Task 2 选择成功,Script Task 4 选择失败.然后点开MyLog.csv 再次查看:


图 24

跟在原 PackageEnd 事件之后的是一个新的PackageStart 接下来三个错误信息是OnError events . 分别是 Script Task 4,Sequence Container 1, 和 Precedence.dtsx 包的 OnError 事件 .最后是另一个 PackageEnd 事件.

高级日志配置 Advanced Log Configuration

再次打开 SSIS 日志编辑窗口点击 Details 标签, 底部还有三个按钮: Advanced, Load, and Save;

图 25

点击 Advanced 按钮显示可选的SSIS 日志字段. :


图26

让我们做一下变动,重新选择如下:

点击 OK 按钮关闭SSIS 日志配置窗口.

建立一个用户自定义日志 Raising Custom Events On-Demand, Part 1

虽然SSIS会自动生成很多日志信息,但是你还是可以手动触发日志,并且定义用户日志信息 .

打开 Script Task 3 的脚本编辑页面. Public Sub Main() 部分显示如下 :

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

我的项目文件选的是C# 因此显示如下:

public void Main()
{
// TODO: Add your code here
string sTaskName = Dts.Variables["TaskName"].Value.ToString();
MessageBox.Show(sTaskName + " completed.");
Dts.TaskResult = (int)ScriptResults.Success;
}

Listing 1

编辑脚本,使之显示如下:

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

C#代码

public void Main()
{
string sTaskName = Dts.Variables["TaskName"].Value.ToString();
string sMsg = sTaskName + " completed.";
bool fay = true; Dts.Events.FireInformation(,sTaskName,sMsg,"", , ref fay);
System.Windows.Forms.MessageBox.Show(sMsg); Dts.TaskResult = (int)ScriptResults.Success;
}

Listing 2

我们添加了代码,用来手动触发一个 Information 事件: Dts.Events.FireInformation(101, sTaskName, sMsg, "", 0, True).  FireInformation 有留个参数 : informationCode (Integer), subComponent (String), description (String), helpFile (String), helpContext (Integer), 和 fireAgain (Boolean). InformationCode 可以用来对信息分类. 我使用 subComponent 鉴别日志. description 是信息描述.  HelpFile 和 helpContext 是帮助提示 ,我从来没配置过,所以不确定他们是怎么工作的. 另外 FireAgain 参数已经废弃 我设置了默认值True .

关闭SSIS 脚本编辑器,再次执行  Precedence.dtsx 包,选项和以前一样 .打开日志文件显示如下:


图 31

注意新的  OnInformation 已经显示,同样也是通过冒泡传递 Script Task 3 –> Sequence Container 1 –> Precedence.dtsx SSIS package.

建立一个用户自定义日志 Raising Custom Events On-Demand, Part 2

与 Information 事件一样,我们也可以建立一个自定义的Error事件, 打开 Script Task 4 脚本编辑器 代码改成下面这样:

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(-, "Script Task 4", _
"Script Task 4 failed!", "", )
End If
End Sub

Listing 5

原文连接:

http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/95353/

资源:

My_First_SSIS_Project_After_Step_11.zip

[译]Stairway to Integration Services Level 11 - 日志配置的更多相关文章

  1. [译]Stairway to Integration Services Level 12 - 高级日志配置

    介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾    Reviewing SSIS Task Events 在做实 ...

  2. [译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)

    介绍 在本文中我们将利用SSIS参数,变量 以及 Foreach Loop Container 从多个源动态导入数据. 开始前我们先下载一些数据.WeatherData_Dec08_Apr09.zip ...

  3. [译]Stairway to Integration Services Level 9 - Control Flow Task Errors

    介绍 在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event han ...

  4. [译]Stairway to Integration Services Level 18 – 部署和执行

    介绍 在本文中,我们要创建一个SSIS Catalog 实例,部署我们的项目,并且运行 weather data loader 包. SSIS 2012 部署模型   SSIS 2012 Deploy ...

  5. [译]Stairway to Integration Services Level 10 - 高级事件活动

    介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性.  同时我们学习了SSIS Control Flow task e ...

  6. [译]Stairway to Integration Services Level 13 - SSIS 变量回顾

    介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...

  7. [译]Stairway to Integration Services Level 7 - SSIS 工作流管理中级

    介绍 前一个章节我们对SSIS的优先约束做了初步了解,并且实验了MaxConcurrentExecutables 包属性的设置. 本文将测试“On Success”, “On Completion”, ...

  8. [译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

    简介 在之前的章节中,我们学习了增量载入数据. 本文中.我们通过优先约束(Precedence Constraints)来管理SSIS的工作流. 添加一个SSIS包 图 1 将新建的Package1. ...

  9. [译]Stairway to Integration Services Level 5 - 增量删除数据

    在 dbo.Contact中添加一行记录 Use AdventureWorks go Insert Into dbo.Contact (FirstName, MiddleName, LastName, ...

随机推荐

  1. ThinkPHP第二十三天(Category表结构、PHPExcel导入数据函数)

    1.category分类表表结构id,name,pid,sort,结合category.class.php类使用. 2.PHPExcel导入数据函数示例 function excel_to_mysql ...

  2. 如何将mongodb bson文件转成json文件

    使用mongodb自带的命令 bsondump collection.bson > collection.json

  3. iOS 开发技巧

    快速移除键盘 之前一直是讲view的父类改成control,然后加一个全屏按钮,点击让键盘消失.这个方法要写好多代码,现在一个比较好的方法是重写一个下面的方法: - (void)touchesBega ...

  4. MYSQL 的数据读取方式

    例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码 ...

  5. 转: 关于异步promises

    迄今为止,可能每个JavaScript开发者和他们的祖母都听说过Promises.如果你没有,那么你即将会.promises的概念是由CommonJS小组的成员在 Promises/A规范 中提出来的 ...

  6. The Use of Aliases in ElasticSearch

    http://paulsabou.com/blog/2012/04/15/the-use-of-aliases-in-elasticsearch/ https://github.com/taskrab ...

  7. Android studio之更改快捷键及自动导包

    更改AS中的代码提示快捷键,AS做的也挺智能的,在Keymap中可以选择使用eclipse的快捷键设置,但是虽然设置了,对有些快捷键还是不能使用,那么就需要我们手动去修改了. 在代码提示AS默认的快捷 ...

  8. android 源代码快速搜索引擎OpenCrok

    使用OpenGrok的Android系统源码搜索引擎,搜索速度简直太快速了!: http://androidxref.com/ 另外,OpenGrok的也是可以在本地计算机中安装配置的,主要是安装To ...

  9. jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js

    jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...

  10. 狼追兔子问题C模拟解

    说,一只兔子在O点处,它的洞穴在正北20m的B点处,一只狼位于兔子正东33米的A点处,模拟如下追逐问题:狼以一倍于兔子的速度紧盯兔子追击,问兔子到达洞口前是否会被狼逮住? 网上很多人说能被追上,包括类 ...