介绍

在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event handlers 和 containers 的联系

关于 SSIS Task Errors

打开 Precedence.dtsx 包. 你的Control Flow 显示如下:

图 1

再做测试前我们先调整两个优先约束.   Script Task 4 和 Script Task 3  调整如下:

图 2

Evaluation operation 选 Expression and Constraint 意味着 表达式和执行状态都必须为Ture . 本列中的表达式MyBool的值必须为Ture,任务运行必须失败. 这样这个Task才算运行成功.

Script Tasks 2 和3 的优先约束配置如下:

图 3

只验证 Expression 表示只要表达式为True即可.  本例中表达式MyBool 的值为Ture那么task就执行成功,任务的执行状态直接忽略.

Execute a Test

按 F5  执行包(注意MyBool的值设置为True) 提示 Succeed Script Task 4?的死后选择No按钮:


图 4

如果你选择了No 按钮, Script Task 4 执行失败

图 5

Script Task 4 失败是因为我们选择No按钮,那为什么 Sequence Container 1 也失败呢?

事件冒泡 Events “Bubble”

错误是一个事件(event) An error is an event and events bubble. What is bubbling? 点击 Package Explorer . 展开 \Executables\Sequence Container 1\Executables\ 节点, 如图:

图 6

Script Task 4 执行失败,然后引发一个错误事件(这个时候 Script Task4 出现了一个红X表示Task失败) . 随后错误事件传递给Sequence Container 1 .由于这个错误在Sequence Container 1里面,所以Sequence Container 1也显示失败 .这种”范围提升”错误事件的传递叫做“冒泡(bubbling).” 这种错误事件不会停在 Sequence Container 1;  它会一直冒到 Precedence 包.

默认情况下错误事件会导致task或者container 失败 . 接下来我们看看如何操作默认属性.

MaximumErrorCount 属性

所有 tasks, 包括Script Task 4, 都有 MaximumErrorCount 属性. 默认情况下 MaximumErrorCount 属性是 1,也就是说只要出现一个错误就会导致task失败. 我们可以把这个属性改为99 ,如下图 :

图 7

再次执行包.我们发现 Sequence Container 1 还是失败了:

图 8

为什么会这样?  原因是 MaximumErrorCount 属性是专为 container设计的, 也就是说 MaximumErrorCount 用在task 上没有效果. 那如果我把Sequence Container 1 的MaximumErrorCount 属性改为99会怎么样?:

图 9

Sequence Container 1 显示成功.

大多数时候我希望出现一个错误,那么包就失败. 但是偶尔我希望把错误全部忽略. 为什么呢? 简单的说就是,忽略错误并不会阻止事件处理. 在本系列的第十篇文章(Advanced Event Behavior – Step 10 of the Stairway to Integration Services),我会进行解释. 我的好友 Julie Smith 分享了一个小技巧: 把MaximumErrorCount 属性设置为 0,也会忽略错误.

图 10

ForceExecutionResult 属性

另外一个使得Sequence Container 1 执行成功的方法是设置容器的 ForceExecutionResult 属性. 先把 MaximumErrorCount 属性改回默认值1 .然后把  ForceExecutionResult  属性改为 Success, 如下图 :

图 11

执行效果如下,即使 MaximumErrorCount  设为1 ,还是会被ForceExecutionResult忽视掉  :

图 12

错误事件 Error Events

每次Control Flow task错误.都会引起一个错误事件(Error Event). 错误事件会被记录然后往上传递. 在Event Handler 添加一个 OnError的 Script Task .我们看看 Error Event属性都有什么东东.

首先, 点击Control Flow 的 Script Task 4 . 然后点击 Event Handlers 标签 :

 
图 13

Event Handler 标签点开后,默认是没有配置的 OnErrorr Event Handler:

图 14

注意:你可以选择Executable的下拉项来选择其他 SSIS 包 :

 
图 15

当然那 Event handler 也可以选择. :


图 16

最后点击 “Click here to create an ‘OnError’ event handler for executable ‘Script Task 4’ :


图 17

点击后,看下OnError event handler的toolbox :

 
图 18

看上去很熟悉?  必须这样, 这个是 Control Flow toolbox!  . 提供SSIS workflows 事件处理.响应事件.(我用的VS2013 ..看起来完全没变化..) . Event handlers 包括一组变量:


图 19

注意,这些是系统变量,如果你看到没显示,那么就是没把显示系统变量的钩打上. :


图 20

为了演示这些事件处理变量是如何工作的,拖一个 Script Task 到 OnError event handler 界面. 打开以后把 ScriptLanguage 属性设置为“Microsoft Visual Basic 2008” . 然后点击ReadOnlyVariables 选择下面几个变量System::ErrorCode, System::ErrorDescription, 和 System::SourceName :


图 21

点击OK按钮, 显示如下 :

 
图 22

点击e Edit Script 按钮,然后在 Public Sub Main() 里面把下面VB代码贴进去:

Dim iErrorCode As Integer = _
Convert.ToInt32(Dts.Variables("ErrorCode").Value)
Dim sErrorDescription As String = _
Dts.Variables("ErrorDescription").Value.ToString
Dim sSourceName As String = _
Dts.Variables("SourceName").Value.ToString
Dim sSubComponent As String = _
"Script Task 4 OnError Event Handler"
Dim sMsg As String = "Source: " & sSourceName & vbCrLf & _
"Error Code: " & iErrorCode.ToString & _
vbCrLf & _
"Error Description: " & _
sErrorDescription MsgBox(sMsg, , sSubComponent) Dts.TaskResult = ScriptResults.Success

Listing 1

Script Task Errors

如果 Script Task 没法定位 ReadOnlyVariables 属性指定的变量.就会报类似下面的错误:

Error: Failed to lock variable "System::ErrorCod" for read access with error 0xC0010001 "The variable cannot be found. This occurs when an attempt is made to retrieve a variable from the Variables collection on a container during execution of the package, and the variable is not there. The variable name may have changed or the variable is not being created.".
Listing 2

我碰到到这个错误是把System::ErrorCode 最后一个’e’漏掉了. 然后执行后报错 :

图 23

Task 执行出错,然后显示如下:

 
图 24

你可能会问为什么错误提示‘Failed to lock variable’(无法锁定变量)? 这个问题很好,因为在Script Task 使用SSIS变量之前,它先’锁定’.具体为什么要这样做.超出了我们文档的范围.  当Script Task 成功的锁定  SSIS 变量. 然后就可以访问了.

----后面还有一些其他写错情况解释…我就不翻译了….有兴趣的同学请看原文

观察一个错误(Observing an Error )

执行该SSIS 包,当弹出 Script Task4 的提示框以后选择 No 按钮:

图 27

点击 No 以后触发一个错误事件.   Script Task 的 OnError 事件接收到这个错误,然后执行并显示错误信息:

图 28

更多关于冒泡 More about Bubbling

早先时候,我们提到事件的”冒泡”.本例中, Script Task4 的错误事件同样会网上传递到 Sequence Container 1. 如果我们在Sequence Container 1上配置 OnError 事件处理. 我们可以观察整个过程.

在Control Flow面板上,点击 Sequence Container 1. 然后点击 Event Handler 标签. 同之前一样,点击” create an OnError event handler for Sequence Container 1”.  然后把Script Task4 OnError 事件的 Script Task 复制黏贴到Sequence Container 1 OnError 事件处理面板中 :

图 29

编辑脚本 Script button. 把其中其中一行改掉:

Dim sSubComponent As String = _
"Sequence Container 1 OnError Event Handler"
右击 Script Task 并执行. 直接结果应该类似下面截图: 

图 30

现在执行整个 SSIS 包.Script Task 4出现提示的时候点击No 按钮, 同之前一样OnError 事件显示如下:

图 31

点击OK以后, 错误事件会冒泡到 Sequence Container 1 OnError 事件:

图 32

这个错误会继续’冒泡’到整个包.大伙可以试下

原文连接:

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

项目文件:

My_First_SSIS_Project_Level_9.7z

[译]Stairway to Integration Services Level 9 - Control Flow Task Errors的更多相关文章

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

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

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

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

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

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

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

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

  5. [译]Stairway to Integration Services Level 15 – SSIS 参数回顾

    介绍 在本文中我们会研究SSIS变量姐妹: SSIS 变量. 我们会演示参数配置,通过包参数管理动态属性值,然后会演示SSIS包执行的时候参数怎么被配置的. SSIS Parameters 101 S ...

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

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

  7. [译]Stairway to Integration Services Level 11 - 日志配置

    介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...

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

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

  9. [译]Stairway to Integration Services Level 4 - 增量更新数据

    在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...

随机推荐

  1. CI(-)框架结构

    一 CI 是什么 CodeIgniter is an Application Development Framework - a toolkit - for people who build web ...

  2. 浅谈qt 布局器

    在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...

  3. Struts2 一张图片引发的bug

    今天如常的打开项目开放.写了一会保存测试.在登录时出了个错误当不影响正常使用.丫的昨天还好好的.行下手上的工作 开始找bug 错误核心代码如下: 10:34:46,442  WARN OgnlValu ...

  4. 《Java4Android视频教程》学习笔记(二)

    一:面向对象 1.对象 ①对象的使用方法 对象.变量 对象.方法 ②匿名对象 new A().方法 new A().变量 匿名对象会被分配到对内存中 java内存处理机制会对一定时间内无指针指向的对象 ...

  5. HDU 3374 String Problem (KMP+最小最大表示)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3374 [题目大意] 给出一个字符串,求出最小和最大表示是从哪一位开始的,并且输出数量. [题解] ...

  6. 优步uber司机怎么注册不了?注册优步司机问题要点

    第一,可能是你的车型不符全要求,看是不是5年内的车型,同时要求车价8W以上:第二,你的驾驶年限不够,要求驾驶证年限1年以上的,如果不够的怎么办,告诉你个方法,PS啊!优步可查不了车管所的系统,所以这类 ...

  7. proguard混淆jar文件

    Proguard是个优秀的java混淆工具,使用示例如下,一个java工程对外接口代码如下(无需混淆) package com.ciaos.open; import com.ciaos.inner.I ...

  8. 第七届河南省赛10402: C.机器人(扩展欧几里德)

    10402: C.机器人 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 53  Solved: 19 [Submit][Status][Web Boa ...

  9. ios即时通讯客户端开发之-mac上基于XMPP的聊天客户端开发环境搭建

    1.搭建服务器  -  安装顺序 - (mysql->openfire->spark) 数据库:mysql 服务器管理工具: openfire 测试工具: spark mysql 安装 h ...

  10. MOSS程序中如何发Mail?

    我们使用.NET类库中的API发Mail的时候,我们要配置他的SMTP Server等,但是在Sharepoint里,已经提供了相关的封装的方法: SPUtility.SendEmail(SPWeb, ...