使用SSIS做ETL的過程中會遇到各種各樣的錯誤,對於一些大資料量的Job失敗以後我們不希望重新運行,因為重新啟動並執行時間開銷是非常大的,我們只希望從失敗的部分開始運行,這樣可以省去很多的時間。
SSIS提供了Checkpoints的功能,可以捕獲檢查點檔案中的重新啟動點。失敗的容器類型以及功能(例如事務)的實現都會影響在檢查點檔案中所記錄的重新啟動點。檢查點檔案中還捕獲變數的當前值。
建立SSIS的時候需要制定 checkpoint檔案目錄,checkpoint的資訊會被儲存到這個xml檔案。當package啟動並執行時候,SSIS執行下面的步驟執行checkpoints:
1.
建立xml檔案
2.
記錄目前使用者定義的變數
3.
記錄每一個成功的步驟
4.
根據情況選擇執行下面的一個選項
A.
當package由於錯誤停止,儲存checkpoint檔案
B.
當整個Package執行成功時刪除checkpoint檔案
下面我建立了兩個Task,一個data flow緊接著執行一段SQL語句:
配置Checkpoints,有三個選項需要配置CheckpointFileName,CheckpointUsage,SaveCheckpoints
將使用Checkpoints的每個Task屬性FailPackageOnFailure設定為設定為True
現在我們測試失敗的狀況,我們可以更改第二個Task的ForceExecutionResults選項為Failure,這樣可以類比Task失敗。
執行一次,失敗,在目錄下面可以找到checkpoint的檔案:
將第二個Task的ForceExecutionResults值修改為None,重新執行
可以看到從上次錯誤的地方執行,只有第二個task執行成功。
主意事項:
不為 For 迴圈和 Foreach
迴圈容器儲存檢查點資料。當重新啟動包時,會再次運行 For
迴圈和 Foreach 迴圈容器及其子容器。如果迴圈中的子容器已成功運行,則不會將其記錄在檢查點檔案中,而是重新運行子容器
更多資訊參考
通過使用檢查點重新啟動包
ImplementingCheckpoints in an SSIS Package
Faking successin SSIS