在Package的执行过程中,如果在Data Flow中出现Error,那么Data Flow component能够将错误行输出,只需要在组件的ErrorOutput中进行简单地配置,参考《Data Flow的Error Output》。相比Data Flow,Control Flow对OnError事件的处理更加复杂和精细,主要需要考虑到以下5个方面:

1,在Control Flow中,Package本身,Task 和 Container具有属性 MaximumErrorCount

2,OnError事件的 Event handler能够捕获Task或Container出现OnError事件,并对Error进行处理

3,Package的Execution Result 和 progress message 对于Error的处理

4,属性FailPackageOnFailure 和 FailParentOnFailure 控制Error向上传递

5,OnError事件能够向父组件传递,类似冒泡

一,默认情况下,当container 出现错误时,package执行失败

二,属性MaximumErrorCount

属性MaximumErrorCount Specifies the maximum number of errors before the executable fails,即指定Executable能够容纳的Error 数量,当达到属性MaximumErrorCount设置的上限值时,Executable执行失败,抛出Error。默认值是1,只要发生Error,组件就会Fail。

设置Execute SQL Task的属性MaximumErrorCount,没有效果,这个属性对Container 或 Package 不起作用。

1,设置Container的属性MaximumErrorCount=2,其子Task发生一个错误,执行情况如下图所示

子Task(Execute SQL Task)执行失败,其父Container执行成功,由于该Container 和 下游组件的优先约束是Success,因此package继续执行下游的组件。

在Progress 选项卡中,SSIS 报出Warning信息

Warning: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.

SSIS Package 最终的执行结果是

失败的原因是Error会继续向父组件传递,直到传递到Root Level(Package),而Package的MaximumErrorCount=1.

2,修改Package的属性,将Package的属性MaximumErrorCount=2,查看执行结果

在Progress Tab中查看执行过程

[Execute SQL Task] Error: Executing the query "insert into dbo.test_env
values(1,N'test_error')" failed with the following error: "An explicit value for the identity column in table 'dbo.test_env' can only be specified when a column list is used and IDENTITY_INSERT is ON.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

三,属性FailPackageOnFailure 和 FailParentOnFailure

FailPackageOnFailure:如果设置为True,那么只要单个task失败,则整个package失败。默认值是False

FailParentOnFailure:如果设置为True,那么只要单个Task失败,则该Task的上层组件将将失败,Task的Parent组件是Container 或 Package。默认值是False。

在发生错误的Task上,这两个属性都是false,通过执行情况来看,这两个属性没有发挥任何作用。

四,OnError事件的Event handler

在一个OnError Event处理程序中,如果将Propagate属性设置为False,那么不需要修改Parent container的MaximumErrorCount属性,就能保证在发生错误后包可以继续运行。详细请阅读《Event的Propagate》。

1,为Container下的Execute SQL Task创建OnError Event handler

2,将OnError的Event handler的系统变量 Propagate设置为False

3,查看package的执行结果

从Progress中查看到的Error Msg是:

[Execute SQL Task] Error: Executing the query "insert into dbo.test_env
values(1,N'test_error')" failed with the following error: "An explicit value for the identity column in table 'dbo.test_env' can only be specified when a column list is used and IDENTITY_INSERT is ON.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

3,将Package部署到Integration Services Catalog中,查看执行的结果,Satus是Succeeded,Error messages中显示错误的信息。

五,结论

Control Flow中发生的任何错误,都会被SSIS Engine捕获;不管如何设置Task或Container的属性,只要发生错误,就会有Error Message产生。

Error 能够向上传递,当Error被OnError事件的 Event handler捕获,并且Propagate设置为False时,Error停止传递。

Package的Execution Result 和 Package中是否出现Error 无关。组件抛出Error,Package仍然可能执行成功,只不过progress中会记录Error message。

Appendix:

引用《Understanding MaximumErrorCount》:

When the number of errors occurring inside a container during execution reaches its MaximumErrorCount, the container’s ExecutionResult is changed to Failure if it is not already set to that state. A value of zero sets the error count threshold to infinity, disabling this functionality.

Errors and execution result are distinct concepts. A container’s internal logic may set its result independent of whether errors have been raised. It’s possible for a container to return success and yet have raised errors or to report failure without having fired any errors. The behavior controlled by MaximumErrorCount bridges between these two concepts, overriding the container’s internal logic to coerce a failed result when the specified number of errors occurs.

MaximumErrorCount’s triggering of a failure result does not terminate the container’s execution. However, the state of failure may be used to influence control flow via precedence constraints. Also, in the case of For and Foreach Loop containers, a failed ExecutionResult disables further iteration.

Some documentation asserts that MaximumErrorCount defines the number of errors that can occur before a container stops running. Based on extensive testing using Microsoft SQL Server Integration Services Designer Version 12.0.2344.23 where I was unable to reproduce MaximumErrorCount halting a container’s execution, I believe this documentation to be inaccurate.

Propagation

By default, errors bubble up from child to parent containers. Within a package, this propagation may be disabled for a particular container by having its OnError event handler  or set the system variable Propagate to false. Note that this variable only affects propagation inside a package. Even when set to false, errors raised in a child package are still passed to the parent package.

Each container in a container hierarchy makes an independent determination of whether a propagated error causes its MaximumErrorCount threshold to be met. For example, an error bubbling up may cause a parent container to fail even though its child container reports success because the parent container’s MaximumErrorCount is set to a lower threshold.

Control Flow 如何处理 Error的更多相关文章

  1. Core Java Volume I — 3.8. Control Flow

    3.8. Control FlowJava, like any programming language, supports both conditional statements and loops ...

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

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

  3. 《CS:APP》 chapter 8 Exceptional Control Flow 注意事项

    Exceptional Control Flow The program counter assumes a sequence of values                            ...

  4. Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises

    非常好的文章,讲javascript 的异步编程的. ------------------------------------------------------------------------- ...

  5. CSAPP Chapter 8:Exception Control Flow

    prcesssor在运行时,假设program counter的值为a0, a1, ... , an-1,每个ak表示相对应的instruction的地址.从ak到ak+1的变化被称为control ...

  6. [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow"

    [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow" 目录 [翻译] TensorFlow ...

  7. SSIS的 Data Flow 和 Control Flow

    Control Flow 和 Data Flow,是SSIS Design中主要用到的两个Tab,理解这两个Tab的作用,对设计更高效的package十分重要. 一,Control Flow 在Con ...

  8. 关于Control flow

    1.一个package包含一个control flow并且一个或多个data flow. (这个项目叫做 Integration services project,提供了三种不同类型的control  ...

  9. SSIS ->> Control Flow And Data Flow

    In the Control Flow, the task is the smallest unit of work, and a task requires completion (success, ...

随机推荐

  1. <Oracle Database>物理结构

    物理结构 Oracle物理结构包含了数据文件.日志文件和控制文件 数据文件 每一个Oracle数据库有一个或多个物理的数据文件.一个数据库的数据文件包含全部数据库数据.数据文件有下列特征: 一个数据文 ...

  2. zmq中zmq_poll()函数介绍

    功能: 查看指定的多个socket上哪些socket发生了指定的事件, 事件有: ZMQ_POLLIN: 有消息到来 ZMQ_POLLOUT: 当前无阻塞可以发送消息 ZMQ_POLLERR: 只对标 ...

  3. 新装ubuntu12.04需要敲的命令集合

    1.sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup sudo gedit /etc/apt/sources.list copy: ...

  4. Linux文件目录权限总结

    代表字符 权限 对文件含义 对目录含义  r 读权限 允许查看文件内容 允许列出目录中内容 w 写权限 允许修改文件内容 允许在目录中创建或删除文件 x 执行权限 允许执行文件 允许进入目录

  5. dbca静默建库和删除库

    dbca查看帮助: [oracle@wen ~]$ dbca -help 1).运行静默建库语句 [oracle@wen ~]$ dbca -silent -cloneTemplate -gdbNam ...

  6. 记一次Redis和NetMQ的测试

    Redis是一个高速缓存K-V数据库,而NetMQ是ZeroMQ的C#实现版本,两者是完全不同的东西. 最近做游戏服务器的时候想到,如果选择一个组件来做服务器间通信的话,ZeroMQ绝对是一个不错的选 ...

  7. TypeScript之接口类型

    Interfaces 作为TypeScript中的核心特色之一,能够让类型检查帮助我们知道一个对象应该有什么,相比我们在编写JavaScript的时候经常遇到函数需要传递参数,可能在编写的时候知道这个 ...

  8. RCP:给GEF编辑器添加网格和标尺。

    网格和标尺效果如上图所示. 添加网格比较简单,也可以自己实现,主要思路是为编辑器添加一个GridLayer.但是还是建议参考eclipse自己的GEF样例来实现. 需要注意两个部分: 1.重写org. ...

  9. PostgreSQL基础整理(一)

    1. 创建数据库: 1)登录bin目录,createdb.exe -U postgres -e mydb; -U 表示本次操作的登录用户名,如果不写会取windows登录的账户,如Administra ...

  10. 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术

    一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...