封裝執行的疑難排解工具

適用于:SQL Server (所有支援的版本) Azure Data Factory 中的 SSIS Integration Runtime

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

在設計階段,SQL Server Data Tools (SSDT) 提供中斷點來暫停封裝執行、[進度] 視窗和資料檢視器,以在資料流程通過時監看您的資料。 不過,如果您是執行已經部署的封裝,就無法使用這些功能。 以下列出用於疑難排解已部署之封裝的主要技術:

  • 使用事件處理常式擷取及處理封裝錯誤。

  • 使用錯誤輸出擷取不正確的資料。

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

您也可以使用下列秘訣與技巧,避免在執行封裝時發生問題

使用事件處理常式擷取及處理封裝錯誤

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

  • 建立 OnError 事件的事件處理常式。 在事件處理常式中,您可以使用傳送郵件工作通知管理員有關失敗的消息,使用指令碼工作與自訂邏輯取得系統資訊以進行疑難排解,或是清除暫存資源或不完全的輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 事件處理常式

使用錯誤輸出針對不正確的資料進行疑難排解

您可以使用可用於許多資料流程元件的錯誤輸出,將包含錯誤的資料列導向不同目的地,以便稍後進行分析。 如需詳細資訊,請參閱 處理資料中的錯誤

  • 使用錯誤輸出擷取不正確的資料。 將包含錯誤的資料列傳送到不同目的地,例如錯誤資料表或文字檔。 錯誤輸出會自動加入兩個數值資料行,一個包含造成資料列遭到拒絕的錯誤編號,另一個包含發生錯誤之資料行的識別碼。

  • 將易懂資訊加入錯誤輸出。 除了錯誤輸出所提供的兩個數值識別碼外,您還可以加入錯誤訊息和資料行名稱,讓錯誤輸出更容易分析。 如需如何使用指令碼加入這兩個額外資料行的範例,請參閱 使用指令碼元件增強錯誤輸出

  • 或者,透過記錄 DiagnosticEx 事件來取得資料行名稱。 此事件會將資料流程歷程對應寫入記錄檔。 您接著可以使用錯誤輸出所擷取的資料行識別碼,在此歷程對應中查詢資料行名稱。 如需詳細資訊,請參閱處理資料中的錯誤

    DiagnosticEx 的訊息資料行值是 XML 文字。 若要檢視封裝執行的訊息正文,請查詢 catalog.operation_messages (SSISDB 資料庫) 檢視。 請注意, DiagnosticEx 事件不會在其 XML 輸出中保留空白,以縮減記錄檔的大小。 若要改善可讀性,可將記錄檔複製到 XML 編輯器 (例如,在 Visual Studio 中),該編輯器需支援 XML 格式設定和語法反白顯示。

使用作業報表針對封裝執行進行疑難排解

標準作業報告可在 SQL Server Management Studio中取得,以協助您監視已部署至 Integration Services 目錄的 Integration Services 套件。 這些封裝報表可協助您檢視封裝狀態及記錄,如有必要,也可協助您識別失敗原因。

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

使用 SSISDB 檢視疑難排解封裝執行

系統提供一些您可以查詢的 SSISDB 資料庫檢視,用以監視封裝執行以及其他作業資訊。 如需詳細資訊,請參閱 監視封裝執行和其他作業

使用記錄功能針對封裝執行進行疑難排解

您可以啟用記錄功能,追蹤執行中之封裝所發生的大部分事件。 記錄提供者會擷取指定之事件的相關資訊,以供稍後分析,並使用資料庫資料表、一般檔案、XML 檔案或其他支援的輸出格式儲存這項資訊。

  • 啟用記錄功能。 您可以只選取想要擷取其資訊的事件與項目,藉以精簡記錄輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 記錄

  • 選取封裝的 [診斷] 事件以疑難排解提供者問題。 現在有可幫助您疑難排解封裝與外部資料來源之間互動的記錄訊息。 如需詳細資訊,請參閱 疑難排解工具封裝連接

  • 增強預設的記錄輸出。 每次執行封裝時,記錄功能通常會將資料列附加至記錄目的地。 雖然記錄輸出的每一個資料列都會以封裝的名稱和唯一識別碼來識別封裝,並且以唯一的 ExecutionID 來識別封裝的執行,但單一清單中若有大量記錄輸出,分析就會變得很困難。

    以下是用於增強預設記錄輸出的一個建議方法,讓您能夠輕鬆地產生報表:

    1. 建立可記錄封裝每次執行作業的父資料表。 此父資料表在每次執行封裝時只有單一資料列,並使用 ExecutionID 連結至 Integration Services 記錄資料表中的子記錄。 您可以在每個封裝的開頭使用執行 SQL 工作,以建立這個新的資料列,並記錄開始時間; 接著再於封裝結尾使用另一個執行 SQL 工作,以結束時間、期間與狀態更新資料列。

    2. 將稽核資訊加入資料流程。 您可以使用「稽核」轉換將建立或修改每一個資料列的封裝執行資訊,加入資料流程中的資料列。 「稽核」轉換可提供九項資訊,包括 PackageName 和 ExecutionInstanceGUID。 如需詳細資訊,請參閱 稽核轉換。 為了進行稽核,如果您有想要加入每個資料列的自訂資訊,便可以使用「衍生的資料行」轉換將這項資訊加入資料流程中的資料列。 如需詳細資訊,請參閱 衍生的資料行轉換

    3. 考慮擷取資料列計數資料。 請考慮另外建立資料表以存放資料列計數資訊,在此資料表中,是以封裝的 ExecutionID 識別封裝執行的每個執行個體。 使用「資料列計數」轉換,在資料流程的關鍵點將資料列計數儲存到一系列變數中。 資料流程結束後,請使用執行 SQL 工作將這一系列的值插入資料表中的資料列,以供稍後進行分析及製作報表。

    For more information about this approach, see the section, "ETL Auditing and Logging," in the Microsoft white paper, Project REAL: Business Intelligence ETL Design Practices.

使用偵錯傾印檔案針對封裝執行進行疑難排解

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

疑難排解執行階段驗證的問題

有時候在尚未執行封裝中的優先工作之前,您可能無法連接到資料來源,或者無法驗證封裝的某些部分。 Integration Services 包含下列功能,可協助您避免因這些狀況而造成的驗證錯誤:

  • 設定載入封裝時無效之封裝元素的 DelayValidation 屬性。 您可以將組態無效之封裝元素的 DelayValidation 設為 [True] ,以避免載入封裝時發生驗證錯誤。 例如,您可能有一項會使用目的地資料表的資料流程工作,而這個目的地資料表卻要等到執行 SQL 工作在執行階段建立資料表後才會存在。 DelayValidation 屬性可以在封裝層級啟用,也可以在封裝所包含的個別工作和容器層級啟用。

    您可以針對資料流程工作設定 DelayValidation 屬性,但無法針對個別資料流程元件設定這個屬性。 將個別資料流程元件的 ValidateExternalMetadata 屬性設為 false中開發封裝時可以用於疑難排解封裝的功能和工具。 不過,當這個屬性的值是 false時,元件不會察覺對外部資料來源之中繼資料所做的變更。 設為 true時, ValidateExternalMetadata 屬性可以協助避免因資料庫中的鎖定而造成的封鎖問題,尤其是在封裝使用交易時。

疑難排解執行階段權限的問題

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

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

疑難排解 64 位元的問題

  • 在 64 位元平台上無法使用某些資料提供者。 特別是,64 位版本不提供連線至 Excel 或 Access 資料來源所需的 Microsoft Jet OLE DB 提供者。

疑難排解沒有隨附描述的錯誤

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

偵錯資料流程