好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于SSIS事件的向上传递(详解)

在SSIS中,Package是Task组件的有序组合,具有层次结构,Package处于层次结构的顶层(Root Level),对于父子包结构,父包(Parent Package)通过Execute Package Task组件调用其他Package,被调用的Package是子包,父包是子包的上层级别,最顶层的Package,处于层次结构的顶层,叫做根包(Root Package);容器(Container)组件包含其他Task组件,容器是被包含的Task组件的父级别(Parent Level);Task组件是层次结构的最底层,处于叶级别(Leaf Level)。事件就是沿着Package的层次结构向上传递的。

在Package中,每一个Task组件都是一个可执行程序(Executable),所有的数据处理任务都是由Task组件完成的。在Package运行(runtime)时,SSIS引擎为了监控和追踪Task组件的运行状态,预先创建了12个系统事件(Event),这些事件都是在Package运行时(runtime)被可执行程序(Executable)触发的,每个事件都会产生相应的消息,用于描述Executable的运行状态,供开发工程师对Package进行调试和性能调优。一旦有事件被触发,SSIS会执行相应的事件处理程序(Event Handler),SSIS为每个事件都创建了默认的事件处理程序,命名规范是:On+EventName,用户可以创建自定义的事件处理程序,以扩展Package的功能,使Package在运行时更容易管理,以完成数据处理任务。在ETL开发中,最常用的事件是错误(Error)事件,该事件在Executable运行出现错误时触发,对应的事件处理程序是OnError。

在Package的层次结构中,事件处理具有向上传递(Propagate)的特性。发生在Task组件的事件,首先会被该Task组件的Event Handler捕获和处理;如果该Task组件没有创建Event Handler,那么SSIS把该Event向上传递到其父级别的Executable,由其父级别的Event Handler来处理;如果该Executable有Event Handler,那么由该Event Handler负责响应和处理该事件。事件会依次向上传递,直到事件被处理,或者传递到顶层被默认处理,事件向上传递的顶层是根包(Root Package)。

引用MSDN官方文档的例子,Package的层次结构如下图所示:

在层次结构中,如果相应的Task组件没有定义事件处理程序,那么事件向上传递的过程如下图所示:

注: 事件向上传递的条件是没有创建自定义的事件处理程序,默认情况下,该图示有误,事件被Event Handler处理之后,将继续向上传递,我会在下文详细解释。

MSDN对图示做了说明:

If an event has no event handler, the event is raised to the next container up the container hierarchy in a package. If this container has an event handler, the event handler runs in response to the event. If not, the event is raised to the next container up the container hierarchy. Only the package has an event handler, for its OnError event. If an error occurs when the Execute SQL task runs, the OnError event handler for the package runs.  

查看更多关于基于SSIS事件的向上传递(详解)的详细内容...

  阅读:45次