在封裝中使用檢查點

Integration Services 可以從失敗點重新啟動失敗的封裝,而無需重新執行整個封裝。如果封裝設定為使用檢查點,則封裝執行的相關資訊會寫入檢查點檔案。當失敗的封裝重新執行時,檢查點檔案會用於從失敗點重新啟動封裝。如果封裝順利執行,則會刪除檢查點檔案,然後在下次封裝執行時重新建立檢查點檔案。

在封裝中使用檢查點有下列優點。

  • 避免重複下載和上載大型檔案。例如,對每個下載使用 FTP 工作來下載多個大型檔案的封裝,在下載單一檔案失敗後可以重新啟動,然後只下載該單一檔案。

  • 避免重複載入大量資料。例如,如果封裝針對每個維度使用不同「大量插入」工作向資料倉儲中的維度資料表執行大量插入,則當一個維度資料表的插入失敗時,該封裝會重新啟動,且只重新載入該維度。

  • 避免重複彙總值。例如,使用資料流程工作執行每個彙總以計算許多彙總 (例如,平均和總和) 的封裝,可以在計算一個彙總失敗之後重新啟動,且只重新計算該彙總。

如果封裝設定為使用檢查點,則 Integration Services 會擷取檢查點檔案中的重新啟動點。失敗的容器類型和功能的實作 (例如,交易) 會影響檢查點檔案中記錄的重新啟動點。檢查點檔案中也會擷取變數目前的值。然而,具有 Object 資料類型之變數的值不會儲存於檢查點檔案中。

如果重新啟動此封裝,Integration Services 不會重新載入封裝組態。而是封裝會使用寫入檢查點檔案的組態資訊。這會確保當封裝重新執行時,會使用與失敗時相同的組態。

定義重新啟動點

下列 Integration Services 元件是您可以使用檢查點重新啟動之不可部分完成的工作單位:

  • 工作:封裝單一工作的工作主機容器是可以重新啟動之最小的不可部分完成的工作單位。

    [!附註]

    由於包含其所有內容的資料流程工作是不可部分完成的工作單位,所以您無法在資料流程的過程中重新啟動封裝。為了避免重新執行整個資料流程,您可能會設計封裝來包含多個資料流程工作。如此一來,當封裝重新啟動時,將只會重新執行失敗的資料流程工作。

  • 交易容器:交易容器也是可以重新啟動的不可部分完成的工作單位。如果封裝在交易容器執行時停止,則交易會結束,且該交易執行的任何工作都會回復。但是,檢查點檔案不會包含子容器所完成之工作的相關資訊,而且當封裝重新啟動時,交易容器和它的子容器都會重新執行。

    為了讓檢查點與交易之間的可能衝突降至最低,當下列其中一個條件成立時,Integration Services 不會儲存有關容器內發生之事情的檢查點資訊:

    • 此容器之 TransactionOption 屬性的值為 Required。

      -或-

    • 此容器之 TransactionOption 屬性的值為 Supported,但是父容器擁有交易或是在交易內註冊。

    [!附註]

    在相同的封裝中使用檢查點與交易可能會造成非預期的結果。例如,當封裝失敗並從檢查點重新啟動時,封裝可能會重複已經過成功認可的交易。

  • Foreach 迴圈容器:Foreach 迴圈容器是另一種可以重新啟動的不可部分完成的工作單位。但是,檢查點檔案不會包含子容器所完成之工作的相關資訊,而且當封裝重新啟動時,Foreach 迴圈容器和它的子容器都會重新執行。

設定封裝重新啟動

檢查點檔案包含所有完成之工作單位的執行結果 (如本主題稍早所述)、系統和使用者定義之變數的目前值,以及封裝組態資訊。該檔案還包含封裝的唯一識別碼。若要順利重新啟動封裝,檢查點檔案中的封裝識別碼必須與封裝中的識別碼相符,否則重新啟動會失敗。這會防止封裝使用不同封裝版本寫入的檢查點檔案。如果封裝順利執行,則在其重新啟動後,會刪除檢查點檔案。

下表列出設定用以實作檢查點的封裝屬性。

屬性

描述

CheckpointFileName

指定檢查點檔案的名稱。

CheckpointUsage

指定是否使用檢查點。

SaveCheckpoints

指出封裝是否儲存檢查點。必須將此屬性設為 True,才能從失敗點重新啟動封裝。

另外,如果想要將封裝中的容器識別為重新啟動點,則必須將這些容器的 FailPackageOnFailure 屬性設為 true。

可以使用 ForceExecutionResult 屬性來測試封裝中檢查點的使用。將工作或容器的 ForceExecutionResult 設為 Failure,可以模擬即時失敗。當重新執行封裝時,會重新執行失敗的工作和容器。

設定 CheckpointUsage 屬性

下表列出 CheckpointUsage 屬性的值。

說明

Never

指定不使用檢查點檔案,且封裝從封裝工作流程的開始點執行。

Always

指定總是使用檢查點檔案,且封裝從上一個執行失敗點重新啟動。如果找不到檢查點檔案,則封裝會失敗。

IfExists

指定如果存在檢查點檔案,就使用該檔案。如果存在檢查點檔案,則封裝會從上一個執行失敗點重新啟動,否則,封裝會從封裝工作流程的開始點執行。

[!附註]

dtexec 的 /CheckPointing on 選項相當於將封裝的 SaveCheckpoints 屬性設為 True,以及將 CheckpointUsage 屬性設為 Always。如需詳細資訊,請參閱<dtexec 公用程式>。

選擇檢查點檔案的位置

如果您在容錯移轉叢集中,已經將 Integration Services 安裝在多個節點上,您可以將檢查點檔案儲存到共用位置。然後,當發生容錯移轉時,您可以在叢集中另一個節點上的最後一個檢查點重新啟動之前中斷的封裝。

保護檢查點檔案

封裝等級保護並不包括檢查點檔案的保護,因此您必須個別保護這些檔案。檢查點資料只能儲存在檔案系統中,而且您應該使用作業系統存取控制清單 (ACL) 來保護儲存檔案之位置或資料夾的安全。請務必保護檢查點檔案的安全,因為它們包含有關封裝狀態的資訊,例如變數目前的值。例如,變數包含的資料錄集可能具有許多私密資料 (例如電話號碼) 的資料列。如需詳細資訊,請參閱<控制封裝所使用之檔案的存取>。

設定檢查點屬性

Integration Services 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。

變更記錄

更新的內容

  • 已在「定義重新啟動點」一節中釐清哪些元件是工作單位。

  • 已新增「選擇檢查點檔案的位置」一節。