[译]Stairway to Integration Services Level 9 - Control Flow Task Errors
介绍
在本文中,我们会实验 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的更多相关文章
- [译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)
介绍 在本文中我们将利用SSIS参数,变量 以及 Foreach Loop Container 从多个源动态导入数据. 开始前我们先下载一些数据.WeatherData_Dec08_Apr09.zip ...
- [译]Stairway to Integration Services Level 12 - 高级日志配置
介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾 Reviewing SSIS Task Events 在做实 ...
- [译]Stairway to Integration Services Level 10 - 高级事件活动
介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性. 同时我们学习了SSIS Control Flow task e ...
- [译]Stairway to Integration Services Level 18 – 部署和执行
介绍 在本文中,我们要创建一个SSIS Catalog 实例,部署我们的项目,并且运行 weather data loader 包. SSIS 2012 部署模型 SSIS 2012 Deploy ...
- [译]Stairway to Integration Services Level 15 – SSIS 参数回顾
介绍 在本文中我们会研究SSIS变量姐妹: SSIS 变量. 我们会演示参数配置,通过包参数管理动态属性值,然后会演示SSIS包执行的时候参数怎么被配置的. SSIS Parameters 101 S ...
- [译]Stairway to Integration Services Level 13 - SSIS 变量回顾
介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...
- [译]Stairway to Integration Services Level 11 - 日志配置
介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...
- [译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础
简介 在之前的章节中,我们学习了增量载入数据. 本文中.我们通过优先约束(Precedence Constraints)来管理SSIS的工作流. 添加一个SSIS包 图 1 将新建的Package1. ...
- [译]Stairway to Integration Services Level 4 - 增量更新数据
在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...
随机推荐
- php-Eclipse对php中的namespace关键字报语法错误的问题
namespace是php5.3以上才支持的, 解决办法:升级IDE 切换Eclipse中的php版本 Window > Preferences > PHP > PHP Int ...
- java面向对象之 类和对象
OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...
- php框架
使用composer构建的php框架 github: https://github.com/Ev2le0/LeoFramework 实现功能: 1)路由 2)ORM 3)视图
- python之单例设计模式
设计模式之单例模式 单例设计模式是怎么来的?在面向对象的程序设计中,当业务并发量非常大时,那么就会出现重复创建相同的对象,每创建一个对象就会开辟一块内存空间,而这些对象其实是一模一样的,那么有没有办法 ...
- 关于BFC
参考 http://www.html-js.com/article/1866(很棒! 还有栗子) http://www.cnblogs.com/lhb25/p/inside-block-format ...
- Linux 下修改Tomcat使用的JVM内存大小
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- 阿里云ECS每天一件事D4:安装mysql5.5.40
Linux平台上MySQL也没什么好说的了,首先准备一下软件环境: yum install gcc gcc-c++ gcc-g77 autoconf automake make cmake bison ...
- 深信服模式(先做减法,必须拜访客户三次、研究需求方向,把产品的问题控制住,快速反应,在未来十年,绝大部分业务都会搬到Internet上来,实现All on Internet)good
深圳市盛凯信息科技有限公司与深信服合作多年,可以说是看着深信服“飞速”长大的.盛凯的总经理邓渊在采访中笑言:“他们(深信服)发展得太快,而我们发展得太慢.” 深信服的产品线已从最初只有VPN一条,到目 ...
- 修改win7注册表发挥大容量内存优势
现在请打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control \Session Manager\MomoryManagement ...
- Oracle的TPCC测试,原来也是个作弊的东西...
http://www.oaktable.net/content/sorted-hash-clusters-rip 根据Jonathan Lewis老先生的测试实例,发觉cluster 的sort功能, ...