SSIS 調試和故障排除


SSIS內置的調試工具是非常完備的,對於數據流的調試,主要是設置斷點和查看變量值,這是在Package的設計階段可以使用的工具,在Package部署到服務器之后,用戶還可以使用事件處理程序以實現Package出錯的自我修復,使用日志記錄等來監控Package的運行狀態,以記錄Package出現故障時的現場信息,為后續修復Package的錯誤提供最原始和有效的信息。當單獨執行一次Package時,用戶還可以為這一次執行實例設置Package級別的日志記錄級別。對數據流的調試,主要是錯誤行和數據查看器,在數據流Task中,可以通過重定向錯誤行把錯誤保存起來,便於后續的調試和故障排除;還可以通過數據查看器,實時查看數據流中的數據,主要用於調試數據流管道。

一,設置斷點

斷點是調試Package時最常用的工具,Task滿足中斷條件時停止,為Task設置斷點的手續十分簡單,用戶選中Task,右擊選擇“Edit Breakpoint”,選擇中斷條件,並啟用斷點即可。

斷點的觸發條件是在Task接收到特定的事件時,用戶可以為一個Task設置多種中斷條件的斷點,常用的中斷條件是:

  • Break when the container receives the OnPreExecute event
  • Break when the container receives the OnPostExecute event
  • Break when the container receives the OnError event

設置斷點的向導如下圖所示,用戶不僅可以選擇中斷條件(Break Condition),還是設置條件命中的次數和類型:

在斷點處,用於可以通過進行Step Into、Step Over和Step Out操作,以便逐步查看Package的運行狀態,也可以按下F5,繼續執行Package下面的Task。

二,查看變量值

在Packag運行到斷點時,用戶可以通過 Local 窗口來窗口Package中所有變量和屬性的值,

Local窗口中的變量是Package中的所有變量,包括用戶自定義的變量和系統變量。在調試Package時,Local窗口中的變量太多,以至於開發工程師需要浪費很多時間去查找關鍵的變量。一般情況下,只有很少的幾個變量會影響Package運行結果,因此,開發工程師比較關注的也是這幾個變量,這時,用戶可以通過 Watch 窗口,手動輸入變量名,重點監控這幾個變量的當前值,以確認Package運行的狀態:

三,事件處理程序

每一個Task和容器都會在運行時觸發事件,例如,OnError事件等,事件處理程序是在特定事件被觸發時,SSIS自動調用的處理程序,事件處理程序會捕獲和處理相關事件。在設計Package時,開發工程師預測可能出現的異常,當異常發生時,Package自動調用事件處理程序來發送郵件通知相關人員及時修復可能存在的異常,或者重新執行Package等,以實現Package的自我修復。

 

事件處理程序捕獲事件,而事件是由Task觸發的,常用的事件是

  • OnError事件:只要發生錯誤都會觸發該事件;
  • OnPostExecute事件:僅在Task或容器執行完成之后觸發該事件;
  • OnPreExecute事件:僅在Task或容器執行之前觸發該事件;

事件處理程序繼承其子Task的相關事件,這意味着如果存在一個容器,並且該容器有一個針對OnError事件定義的事件處理程序,那么當該容器的一個子Task發生錯誤時,將會觸發此容器的事件處理程序。該過程被稱作“冒泡”事件,或者從子Task到容器的旅行。最高級別的可執行文件是Package本身,因此,如果在Package級別定義了一個事件處理程序,那么每當事件發生時,都會觸發Package級別的事件處理程序。

四,日志記錄

通常情況下,使用項目部署模型把Package部署到SSIS服務上,使用SSISDB數據庫來保存Package運行的日志。如果要修改日志記錄的級別,那么需要修改SSISDB的默認設置。

在Integration Services Catalogs目錄下,點擊SSISDB,配置Server-wide的默認日志級別。

SSIS的日志記錄共有4個級別,記錄的數據從少到多,依次是:

  • None:包括可執行文件、Task和參數的最小日志記錄
  • Basic:默認的日志記錄級別,包含None級別,以及針對特定事件的Operation的統計信息和消息;
  • Performance:包括None級別,錯誤和警告事件,以及為了性能優化而進行的事件上下文;
  • Verbose:記錄的消息最多,最高級別的日志記錄級別,記錄所有的消息。

默認情況下,Package的日志記錄級別和服務器級別的日志記錄級別相同,用戶還可以單獨設置Package的日志記錄級別。在Integration Services Catalogs目錄中,選中某一個Package,右擊彈出快捷菜單,點擊“Execute”,切換到Advanced選項卡,為這一次執行實例設置日志級別。這個設置是一次性的,集成服務不會記錄,Package在下次執行時,默認的日志記錄級別還是和服務器級別的日志記錄級別相同。

五,錯誤輸出

在數據流中,錯誤行都是通過使用Error Output來配置的,這些屬性高數數據流組件,當針對某一行的操作失敗(出錯或截斷)時應該怎么做。

對錯誤或截斷的處理程序有三種:

  • 組件失敗(Fail Component):當針對某一列選擇了“組件失敗”,並且產生了錯誤時,數據流將停止運行並失敗,同時觸發任何針對數據流任務的OnError事件。
  • 重定向行(Redirect Row):當任何被標記為重定向的列中任何一行產生錯誤,整個行都將被發送到紅色的錯誤路徑輸出,但是,數據流任務不會失敗。如果沒有使用紅色的錯誤路徑,那么該行將從數據流中丟棄。
  • 忽略失敗(Ignore Failure):如果錯誤發生在源或轉換中,那么錯誤列的值會被設置為NULL。如果是截斷錯誤,那么只會向下游發送截斷之后的值。當對目標進行處理時,某一列的忽略錯誤會導致忽略整個數據行,而不是忽略錯誤列。

 用戶可以把錯誤行重定向,保存到特定的數據結構中,以保存錯誤的數據,然后分析數據,對Package進行故障排除。

六,數據查看器

在數據流任務中,兩個組件之間的連線叫做數據流路徑(Data Flow Path),路徑的數據查看器默認是禁用的,用戶可以選中路徑,右擊選擇“Enable Data Viewer”,啟用數據查看器。

數據經過源或轉換組件流向下游組件時,利用數據查看器可以實時查看數據,以檢查數據是否出現異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM