共用方式為


套件執行問題的排解工具

Integration Services 包含的功能和工具,可讓您在套件完成並部署之後,用來針對套件進行疑難解答。

在設計階段,SQL Server Data Tools (SSDT) 提供斷點來暫停封包執行、進度視窗和資料查看器,以便在資料通過資料流時檢視您的資料。 不過,當您執行已部署的套件時,無法使用這些功能。 針對已部署套件進行疑難解答的主要技術如下:

  • 使用事件處理程式攔截和處理封裝錯誤。

  • 使用錯誤輸出擷取不正確的數據。

  • 使用記錄來追蹤封裝執行的步驟。

您也可以使用下列秘訣和技術來避免執行套件的問題

使用事件處理程式攔截和處理封裝錯誤

您可以使用事件處理程式來回應封裝所引發的許多事件,以及封裝中的物件。

  • 建立 OnError 事件的事件處理程式。 在事件處理程式中,您可以使用傳送郵件工作來通知系統管理員失敗、使用腳本工作和自定義邏輯取得系統資訊以進行疑難解答,或清除暫時資源或不完整的輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 事件處理程式

使用錯誤輸出對不正確的數據進行疑難解答

您可以使用許多數據流元件上可用的錯誤輸出,將包含錯誤的數據列導向至個別目的地,以供稍後分析。

  • 透過錯誤輸出捕獲錯誤數據。 將包含錯誤的數據列傳送至個別目的地,例如錯誤數據表或文本檔。 錯誤輸出會自動新增兩個數值數據行,其中包含導致數據列遭到拒絕的錯誤數目,以及發生錯誤之數據行的標識碼。 如需詳細資訊,請參閱 處理資料中的錯誤

  • 將友善資訊新增至錯誤輸出。 除了錯誤輸出所提供的兩個數值標識碼之外,您還可以新增描述性資訊,讓您更輕鬆地分析錯誤輸出。

    新增錯誤的描述。 使用文稿元件很容易查閱錯誤描述。 如需詳細資訊,請參閱 增強腳本元件的錯誤輸出

    新增錯誤數據行的名稱。 查找錯誤輸出所儲存的欄位 ID 對應的欄位名稱在腳本元件中不容易做到,並且需要額外的步驟。 數據流中的每個數據行標識碼在該數據流工作中都是唯一的,而且會在設計時間保存在封裝中。 下列方法是將數據行名稱新增至錯誤輸出的其中一個建議。

    1. 建立欄位名稱的查找表。 建立個別的應用程式,使用 Integration Services API 逐一查看每個已儲存的封裝、封裝中的每個數據流、數據流中的每個物件,以及數據流物件中的每個輸入和輸出。 應用程式應該將每個數據行的數據行標識碼和名稱保存至查閱表格,以及父數據流工作的標識碼和封裝的標識碼。

    2. 將資料行名稱新增至輸出。 將查閱轉換新增至錯誤輸出,以查閱在上一個步驟中建立的查閱表格中的欄名稱。 查閱可以使用錯誤輸出中的數據行標識碼、套件標識碼(可在系統變數 System::P ackageID 中使用),以及數據流工作的標識碼(可在系統變數 System::TaskID 中使用)。

使用作業報告對封裝執行進行疑難解答

SQL Server Management Studio 中提供標準作業報告,可協助您監視已部署至 Integration Services 目錄的 Integration Services 套件。 這些套件報告可協助您檢視套件狀態和歷程記錄,並在必要時識別失敗的原因。

如需詳細資訊,請參閱 封裝執行的疑難排解報告

使用 SSISDB 檢視對封裝執行進行疑難解答

您可以使用許多 SSISDB 資料庫檢視來查詢以監視封裝執行和其他作業資訊。 如需詳細資訊,請參閱 監視封裝執行和其他作業

使用記錄對套件執行進行疑難排解

您可以啟用記錄來追蹤執行中套件中發生的大部分情況。 記錄提供者會擷取指定事件的相關信息以供稍後分析,並將該資訊儲存在資料庫數據表、一般檔案、XML 檔案或其他支援的輸出格式中。

  • 啟用記錄。 您可以透過挑選僅有您想擷取的事件和資訊項目來優化記錄輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 記錄Integration Services (SSIS) 記錄

  • 選取套件的診斷事件,以針對提供者問題進行疑難解答。 有記錄訊息可協助您針對套件與外部數據源的互動進行疑難解答。 如需詳細資訊,請參閱 疑難解答工具套件連線問題

  • 增強預設記錄輸出。 每次執行套件時,日誌記錄通常會將行附加至記錄目標位置。 雖然記錄輸出的每個數據列都會依其名稱和唯一標識符來識別封裝,而且也會透過唯一的 ExecutionID 來識別封裝的執行,但是單一清單中的大量記錄輸出可能會變得難以分析。

    下列方法是增強默認記錄輸出的其中一個建議,可讓您更輕鬆地產生報告:

    1. 建立父數據表,以記錄封裝的每個執行。 這個父資料表對於每次執行封包只有一個列,並使用ExecutionID連結至Integration Services 日誌資料表中的子記錄。 您可以在每個封裝的開頭使用「執行 SQL」工作來建立這個新數據列,並記錄開始時間。 然後,您可以在封裝結尾使用另一個執行 SQL 工作,以更新某一行的結束時間、持續時間和狀態。

    2. 將稽核資訊新增至數據流。 您可以使用稽核轉換,將資訊新增至數據流中的數據列,以瞭解建立或修改每個數據列的封裝執行。 稽核轉換提供九項資訊,包括 PackageName 和 ExecutionInstanceGUID。 如需詳細資訊,請參閱 稽核轉換。 如果您有想要納入每個數據列的自訂資訊以供稽核之用,您可以使用衍生的數據行轉換,將這項資訊新增至數據流中的數據列。 如需詳細資訊,請參閱 衍生的資料行轉換

    3. 請考慮擷取行數數據。 請考慮為數據列計數資訊建立個別的數據表,其中每個封裝執行實例都會由其 ExecutionID 來識別。 使用「列數計算轉換」功能,將列數儲存到數據流中關鍵點的一系列變數中。 數據流結束后,請使用執行 SQL 工作,將數列值插入數據表中的數據列,以供稍後分析和報告使用。

    如需此方法的詳細資訊,請參閱Microsoft白皮書《 商業智慧 ETL 設計實務》中的一節。

使用除錯傾印檔案對套件執行進行疑難排解

在 Integration Services 中,您可以建立偵錯轉存檔案,以提供套件執行的相關資訊。 如需相關資訊,請參閱 產生封裝執行的傾印檔案

排除執行期間驗證問題

有時候,您可能無法連線到數據源,或封裝的部分無法驗證,直到封裝中的先前工作執行為止。 Integration Services 包含下列功能,可協助您避免因下列情況而產生的驗證錯誤:

  • 在載入封裝時無效的封裝項目上設定DelayValidation屬性。 您可以在組態無效的封裝元素上設定 DelayValidationTrue ,以避免載入封裝時發生驗證錯誤。 例如,您可能有一個資料流程任務,該任務使用作為目的地的數據表,而此數據表在運行期間由“執行SQL任務”建立之前並不存在。 DelayValidation屬性可以在封裝層級或封裝所包含的個別工作和容器層級啟用。

    屬性 DelayValidation 可以在數據流工作上設定,但不能在個別數據流元件上設定。 您可以將個別數據流元件的 屬性設定 ValidateExternalMetadatafalse,以達到類似的效果。 不過,當這個屬性的值是 false時,元件並不知道外部數據源元數據的變更。 當設定為 true時,ValidateExternalMetadata 屬性有助於避免在資料庫中因鎖定造成的阻塞問題,特別是當套件使用交易時。

針對執行時權限問題進行疑難解答

如果您在嘗試使用 SQL Server Agent 執行已部署套件時發生錯誤,Agent 所使用的帳戶可能沒有必要的許可權。 如需如何針對從 SQL Server Agent 作業執行的套件進行疑難解答的詳細資訊,請參閱 從 SQL Server Agent 作業步驟呼叫 SSIS 套件時,SSIS 套件不會執行。 如需有關如何從 SQL Server Agent 作業執行封裝的詳細資訊,請參閱 SQL Server Agent 作業執行封裝

若要連線到 Excel 或 Access 資料來源,SQL Server Agent 需要一個有權讀取、寫入、建立和刪除所指定的資料夾中暫存檔案的帳戶,該資料夾是由 TEMP 和 TMP 環境變數指定的。

針對64位元問題進行問題排除

  • 某些數據提供者無法在64位平臺上使用。 特別是 64 位版本無法使用連線至 Excel 或 Access 數據源所需的 Microsoft Jet OLE DB 提供者。

針對沒有描述的錯誤進行疑難解答

如果您遇到沒有隨附描述的 Integration Services 錯誤,您可以在 Integration Services 錯誤和訊息參考 中依錯誤編號查閱以找到描述。 此清單目前不包含疑難解答資訊。

在資料流元件中設定錯誤輸出