一次SSIS Package的调试经历
SSIS Package的調試有時是一個非常艱難的過程,由于SSIS 編譯器給出的錯誤信息,可能并不完善,需要程序員根據錯誤信息抽絲撥繭,尋找錯誤的根源,進而解決問題。
第一部分:SSIS提供的調試工具
1,SSIS Package的 Control Flow 通過醒目的圖標顯示task的執行情況
在執行package的時候,如果一個Task上顯示綠色的勾,表示task執行正常,如果顯示的是紅色的X,表示task執行異常。
通常SSIS Package調試的第一步就是尋找出錯的Task,然后進入該task的data flow中查看報錯的component。
?
在Task上顯示錯誤信息,進入該task,發現Excel Source沒有指定connection manager。
?
2,在package執行時,會出現一個progress顯示執行的進度
如果錯誤,會在Progress中顯示錯誤的信息
3,Data Viewer 查看從上游組件傳遞的數據
通過 點擊藍色的數據流線,Enable Data Viewer來查看數據。
4,設置breakpoint
選中Task,點擊右鍵,選中Edit Breakpoint來設置斷點,進行調試
5,package 事件,可以在事件中寫入特殊的代碼,當錯誤出現時,發送runtime的錯誤信息或將錯誤信息寫入文檔,方便程序員捕捉錯誤信息,提高debug的效率。
6,以上5種都是非常方便的調試工具,當然SSIS提供的輔助調試工具也有很多,各有用途,如果使用得當,將會使debug更有效率。
?
第二部分:示例
在使用scripte componet的一個package,出現一個錯誤信息 “object reference not set to an instance of an object”
說明在?scripte componet的C#代碼中,并沒有將對象設置為一個有效的實例。
DataTable dt;public override void PreExecute(){base.PreExecute();IDTSConnectionManager100 cnManager = Connections.Connection;SqlConnection cnn = (SqlConnection)cnManager.AcquireConnection(null);SqlCommand cmd = cnn.CreateCommand();cmd.CommandText = "select code,name from [dbo].[tbExcel]";cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 60000;dt = new DataTable("dt");SqlDataAdapter sda = new SqlDataAdapter(cmd);sda.Fill(dt);}
從PreExecute函數中,可以看出,最有可能的錯誤原因是 cnManager 并沒有獲取到Package的Connection Manager
IDTSConnectionManager100 cnManager = Connections.Connection;
查看Script component的connection managers選項卡,已經設置了connection manager,那么錯誤的原因可能就是Name=Connection的Connection Manager的鏈接字符串有錯誤,導致無法連接到DB。
經驗證,最終的結果跟推測一樣,Connection Manager的鏈接字符串有錯誤,無法連接到DB,導致Script component執行失敗。?
轉載于:https://www.cnblogs.com/zhengxingpeng/p/6688035.html
總結
以上是生活随笔為你收集整理的一次SSIS Package的调试经历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 4810 [Ynoi2017]
- 下一篇: Observable观察者模式的使用