Troubleshooting SSIS Package
Design-Time 除錯
Breakpoints
我們常會在程式碼除錯時使用中斷點技巧,在 package 中也可以使用中斷點,不過它只可以用在 control-flow。 若你對某個 task 設定中斷,控制流程就會在這個工作暫停。
1. Edit Breakpoint
你可以在控制流程中的工作上設定中斷點。
2. Setting Breakpoint
封裝的中斷不像程式碼可以明確指定在第幾行中斷,它是利用執行工作的事件處理來引發中斷。 同時,你還可以利用叫用計數類型,來加強設定中斷條件。
- 叫用計數類型(Hit Count Type):用來設定引發中斷條件類型
- 叫用計數(Hit Count):設定引發中斷條件的計數
3. Breakpoint (a red dot)
Troubleshoot on Task paused
當中斷發生時,你可以使用以下功能進行除錯。
1. 查看區域變數。
上圖中,當紅點中有個黃色箭號,表示工作已被中斷,此時你可以開啟區域變數視窗觀查變數值的變化。 例如,你可以設定事件 OnPreExecution 和 OnPostExecution 要發生中斷,觀查變數值的變化。
2. 修改區域變數。
你也可以在此時修改區域變數。
3. 查看堆疊(stack)。
你可以透過堆疊視窗中的資訊,查看在中斷點之前,哪些工作已經執行過了。
4. 停止或繼續。
Using Data Viewers in the Data Flow
Breakpoints 用來中斷 Control-Flow 中的 Task ,如果你想要檢視 Data-Flow 中資料列的處理狀況,那麼就必須使用 Data Viewer 。
1.執行路徑(path)的右鍵選單中「編輯」。
在「資料檢視」頁籤中設定你要檢視的欄位,並勾選「啟用資料檢視器」項目。
有設定「資料檢視」的路徑狀態
2.你也可以直接在路徑(path)的右鍵選單中執行「啟用資料檢視器」。
這功能預設會直接勾選所有資料欄位
3. 當資料流執行到你設定的路徑中時,就會跳出一個Grid視窗,列出目前資料流中的資料。
4. 停用、啟用、刪除資料檢視器或中斷點。
你可以停用中斷,若一個個停用太慢,也可以全部停用或刪除。
如果選擇全部停用或刪除,包含控制流程中的中斷點,或者資料流程中的資料檢視器,都會一起停用或刪除。
Using Other Methods for Debugging
下列幾個除錯技巧也可以用在設計階段:
使用錯誤輸出(error outputs)
在 Data-Flow 中的每個元件,都會有一個 error flow ,你可以由這個輸出檢視哪些失敗的資料。
使用訊息視窗
在 Controol-Flow 中,你可以利用 Script Task 來顯示訊息視窗。
在 Data-Flow 中,你可以利用 Script Component 來顯示訊息視窗。
使用較少量的資料做測試
偵錯時,你可以使用 Percentage Sampling Transformation 或 Row Sampling Transformation 來取得範本資料。
捕捉已處理資料筆數
你可以利用 Row Count Transformation 補捉資料來源的筆數,與最後寫入資料目的地的筆數做比對,驗證資料筆數是否符合。
Production-Time 除錯
Using the SSISDB Catalog
執行階段的除錯,除了透過 logging 方式外,在 SSIS 2012 中,最重要的新功能就是 SSISDB Catalog。 SSISDB Catalog 是一個中央儲存區,可用來管理所有的專案、封裝、參數、環境變數, 在封裝的執行過程中,它也可以自動記錄下這些過程。
SSISDB Catalog 預設的記錄層次為[基本],你可以在[目錄屬性]視窗中將預設記錄層次更改為「詳細資訊(Verbose)」,以記錄更多的資訊。
Logging levels
- None: 關閉記錄功能。 只記錄封裝執行狀態。
- Basic: 此為預設值。記錄所有事件,自訂和診斷事件除外。
- Performance: 只記錄效能統計資料,以及 OnError 和 OnWarning 事件。
- Verbose: 記錄所有事件,包括自訂和診斷事件。 會將過程中的每個步驟都詳記紀錄產生一筆資料,可透過 catalog.execution_data_statistics 檢視顯示。
同時 SSISDB Catalog 上面也有許多事先定義好的報表,你可以使用這些報表來查詢封裝的執行資訊。
點選上圖中的[概觀],還可進一步查看詳細資料。
或者,你可以使用 SSISDB 資料庫中的目錄檢視(catalog views),透過 TSQL 方式來查詢封裝的執行資訊。
select execution_id, folder_name, project_name, environment_name, executed_as_name, created_time, status, start_time, end_time, caller_name, server_name from catalog.executions
Using Data Taps
前面提到過,在 Design-Time 時,你可以使用「資料檢視器」(Data Viewer)來查看資料流中的資料, 可是如果在 Production-Time 時,這個功能自然無法使用,這時你就可以使用 SQL 2012 提供的新功能:「Data Taps(資料竊聽器)」。 它功能就類似「資料檢視器」,你可以設定流過某個元件的資料,自動轉出成為逗號分割的檔案。
PS. Data Flow Taps 在 MSDN 中翻譯成「資料流程點選」。
要啟用 Data Taps ,必須先執行位於 SSISDB 資料庫中的下列預存程序:
- 使用 catalog.create_execution 建立封裝的執行個體。
- 使用 catalog.add_data_tap 加入 taps 。
- 使用 catalog.start_execution 執行封裝。
- 最後再利用 catalog.executions 可取得封裝執行狀況。
catalog.add_data_tap 的幾個參數:
- @execution_id :裝執行id
- @task_package_path :這個是封裝中,Data Flow Task 的路徑。
- @dataflow_path_id_string :這個在 Data Flow 中你要竊聽的那個路徑的識別。
- @data_filename :輸出檔案名稱。預設會儲存在 DataDumps 資料夾 (C:\Program Files\Microsoft SQL Server\110\DTS\DataDumps)
PS.這個例子執行不會成功,那個 dataflow_path_id_string 參數過不了,感覺是中文版的問題。
沒有留言:
張貼留言