tft每日頭條

 > 生活

 > ssis學習

ssis學習

生活 更新时间:2024-12-12 15:48:24

Package在執行過程中,不可避免地會發生錯誤,如果處理錯誤?簡單粗暴的做法,是Package直接停止運行。對于一個成熟的ETL工具,這顯然不是唯一的錯誤處理方法。如果在數據流中出現錯誤,那麼數據流組件可以把錯誤行輸出,這隻需要在組件的ErrorOutput中進行簡單地配置。跟數據流相比,控制流中包含錯誤處理程序OnError,對錯誤事件的處理更加複雜和精細。

用戶可以通過MaximumErrorCount屬性和OnError事件處理程序來對錯誤進行控制:

  • Package本身、Task 和 Container具有屬性MaximumErrorCount,用于控制錯誤之前組件可以出錯的次數 ;
  • OnError事件處理程序能夠捕獲Task或容器中觸發的OnError事件,并對錯誤進行處理。
一,屬性MaximumErrorCount用法

屬性MaximumErrorCount 指定Task組件在失敗之前可以出錯的次數,當累積的錯誤達到屬性MaximumErrorCount的值時,Task執行失敗。該屬性的默認值是1,也就是,隻要發生錯誤,組件就會失敗。

1,測試容器的MaximumErrorCount

設置容器的屬性MaximumErrorCount=2,其子Task發生一個錯誤,執行情況如下圖所示:

ssis學習(處理錯誤的方法)1

容器執行成功,子Task執行失敗,這是由于容器的MaximumErrorCount屬性是2,還沒有達到失敗的阈值,因此容器的執行結果是成功的。在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 最終的執行結果是

ssis學習(處理錯誤的方法)2

失敗的原因是錯誤會繼續向父組件傳遞,直到傳遞到Root Level(Package),而Package的MaximumErrorCount=1。

2,測試Package的屬性MaximumErrorCount

把Package的屬性MaximumErrorCount設置為2,把容器的屬性MaximumErrorCount設置1,查看Package的執行結果

ssis學習(處理錯誤的方法)3

ssis學習(處理錯誤的方法)4

在Progress Tab中查看執行過程:

[Execute SQL Task2] Error: Executing the query "insert into dbo.test_envvalues(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.

二,OnError事件的錯誤處理程序

在一個OnError 事件的處理程序中,如果把系統變量Propagate屬性設置為False,那麼不需要修改父容器的MaximumErrorCount屬性,就能保證在發生錯誤後,Package可以繼續運行。

1,測試系統變量 Propagate

為容器下的Execute SQL Task創建OnError事件處理程序,把OnError的事件處理程序中的系統變量 Propagate設置為False

ssis學習(處理錯誤的方法)5

查看package的執行結果,雖然Execute SQL Task 2執行失敗,但是容器的執行結果是成功的,Package的執行結果也是成功的,如下圖所示:

ssis學習(處理錯誤的方法)6

ssis學習(處理錯誤的方法)7

從Progress中查看到的錯誤消息是:

[Execute SQL Task] Error: Executing the query "insert into dbo.test_envvalues(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.

2,從SSISDB中查看錯誤

把Package部署到Integration Services Catalog中,查看執行的結果,Satus是Succeeded,Error messages中顯示錯誤的信息。

ssis學習(處理錯誤的方法)8

四,錯誤對執行結果和消息的影響

控制流中發生的任何錯誤,都會被SSIS引擎捕獲;不管如何設置Task或Container的屬性,隻要發生錯誤,就會産生錯誤消息。

錯誤能夠向上傳遞,當錯誤被OnError事件處理程序捕獲時,通過設置系統變量Propagate為False時,可以停止錯誤向父級别傳遞。

Package的執行結果受到屬性的控制,組件抛出錯誤,Package仍然可能執行成功,隻不過progress中會記錄錯誤消息。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved