91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于SSIS事件向上傳遞的示例分析

發布時間:2021-07-29 14:13:10 來源:億速云 閱讀:142 作者:小新 欄目:數據庫

這篇文章主要介紹了基于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的層次結構如下圖所示:

基于SSIS事件向上傳遞的示例分析

在層次結構中,如果相應的Task組件沒有定義事件處理程序,那么事件向上傳遞的過程如下圖所示:

基于SSIS事件向上傳遞的示例分析

注:事件向上傳遞的條件是沒有創建自定義的事件處理程序,默認情況下,該圖示有誤,事件被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.

把事件依次向上傳遞的特性,是由事件處理程序(Event Handler)的系統變量 Propagate 控制的,變量Propagate的默認值是True,這意味著,默認情況下,該事件將會被傳遞到上層級別的Event Handler中進行處理。有一個例外是在父子包結構中,子Package在進行包驗證(Validation)時,不管子包的Propagate變量的值如何設置,都會把驗證事件傳遞到父包中,父包繼續執行驗證。

當前Task組件必須創建事件處理程序,才能查看和修改變量Propagate的值。如果把事件處理程序(Event Handler)的Propagate變量設置為False,那么該事件只會被當前的事件處理程序處理和響應,不會被傳遞到上層級別的事件處理程序中。但是,如果沒有為“肇事”的Task組件創建事件處理程序(Event Handler),那么事件總是向上傳遞,直到被事件處理程序響應,如果Package的層次結構沒有定義任何事件處理程序,那么事件最終被根包(Root Package)默認處理。

一,錯誤事件處理程序(OnError)向上傳遞

默認情況下,當前Task組件的事件處理程序中把錯誤(Error)事件處理之后,SSIS引擎仍然把錯誤事件向上層事件處理程序傳遞,直到包層次結構的最頂層,如下圖,在ChildPackage的Package級別和Executable級別上分別創建了OnError事件處理程序,Executable級別是child Execute SQL Task:

基于SSIS事件向上傳遞的示例分析

執行Package,在child Execute SQL Task中觸發錯誤事件,被該Task的事件處理程序捕獲和處理,下圖是Executable級別的OnError事件處理程序,其成功執行一個Task:

基于SSIS事件向上傳遞的示例分析

但是,錯誤事件沒有停止,而是繼續向上傳遞,被其直接上級,也就是Package級別的OnError事件處理程序捕獲,如下圖,來自子Task組件的錯誤事件被父級處理之后,Package仍然報錯,錯誤消息是:Package execution completed with error.

基于SSIS事件向上傳遞的示例分析

基于SSIS事件向上傳遞的示例分析

錯誤事件處理程序把錯誤事件(Error)向上傳遞(Propagate)的過程類似“冒泡”,從觸發錯誤事件的“肇事”Task組件開始,逐級向上傳遞到最頂層的可執行程序(Executable),最頂層的Executable是 Package 本身。這意味著,如果在Package 級別定義了一個錯誤事件處理程序(OnError),每當Package中的任意一個Task組件觸發錯誤事件(Error),最終都會觸發Package級別的錯誤事件處理程序。在父子包結構中,如果父Package通過Execute Package Task調用子Package,那么,錯誤事件會發生相同的過程,子Package的錯誤事件會向上傳遞(Propagate)到父Package中。

二,禁用錯誤事件的向上傳遞

如果想要禁用事件的向上傳遞過程,可以在Task組件的事件處理程序中,把系統變量Propagate設置為False,這樣,事件將不再向上傳遞,只觸發當前Task組件的事件處理程序,只有在Task組件中創建事件處理程序之后,才能修改系統變量Propagate的默認值。

1,修改系統變量Propagate的默認值

step1,呈現系統變量

打開Event Handlers Tab,在Variables 窗體中,點擊網格選項(Grid Options)按鈕,打開Variable Grid Options 窗體,在Filter選項中勾選"Show system variables",點擊“OK”,返回到Variables窗體:

基于SSIS事件向上傳遞的示例分析

基于SSIS事件向上傳遞的示例分析

step2,設置Propagate的值

在 Variables 窗體中,找到 Propagate 系統變量(Scope是OnError),把Value設置為False

基于SSIS事件向上傳遞的示例分析

2,禁用事件處理的向上傳遞

禁用Task組件的事件處理的向上傳遞(Propagate)特性之后,在當前Task組件中觸發的事件,只會被當前Task組件的事件處理程序捕獲和處理,而不傳遞到上層Task組件的事件處理程序。

再次執行Package,由于錯誤事件是被child Execute SQL Task觸發的,其事件處理程序自動捕獲并處理該Error事件:

基于SSIS事件向上傳遞的示例分析

而Package級別的事件處理程序沒有捕獲到Error事件,Package沒有執行OnError事件處理程序,最終的執行結果是:Package execution completed with success。

基于SSIS事件向上傳遞的示例分析

基于SSIS事件向上傳遞的示例分析

三,沒有創建事件處理程序

如果沒有為Task組件創建事件處理程序(Event Handler),那么事件總是從當前Task組件向上傳遞。用戶創建事件處理程序,并不意味著,需要在其中添加Task組件,做數據處理任務,空的事件處理程序是允許的。在空的事件處理程序中把系統變量Propagate設置為False,那么事件將不會向上傳遞,也不會被顯式處理,錯誤消息仍然會被SSISDB記錄,但強烈建議不要這樣做。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“基于SSIS事件向上傳遞的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴林左旗| 尼勒克县| 密山市| 宁化县| 聂荣县| 银川市| 古蔺县| 阿坝县| 富顺县| 临海市| 民丰县| 靖州| 谢通门县| 紫金县| 新蔡县| 兴仁县| 建宁县| 宣城市| 丹凤县| 乐安县| 日喀则市| 莱西市| 双鸭山市| 炎陵县| 光山县| 红河县| 射洪县| 浮山县| 邵武市| 涟水县| 太湖县| 天柱县| 商城县| 焦作市| 阜新市| 霍州市| 和硕县| 车险| 洞口县| 滕州市| 布尔津县|