封裝執行的疑難排解工具
適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime
Integration Services 包含功能和工具,可讓您在完成及部署封裝之後執行封裝時,針對封裝進行疑難排解。
在設計階段,SQL Server Data Tools (SSDT) 會提供中斷點以暫停封裝的執行,並提供 [進度] 視窗及資料檢視器以監看通過資料流程的資料。 不過,如果您是執行已經部署的封裝,就無法使用這些功能。 以下列出用於疑難排解已部署之封裝的主要技術:
使用事件處理常式擷取及處理封裝錯誤。
使用錯誤輸出擷取不正確的資料。
使用記錄功能追蹤執行封裝的步驟。
您也可以使用下列秘訣與技巧,避免在執行封裝時發生問題
使用交易協助確保資料的完整性。 如需詳細資訊,請參閱 Integration Services 交易。
使用檢查點從失敗點重新啟動封裝。 如需詳細資訊,請參閱 使用檢查點來重新啟動封裝。
使用事件處理常式擷取及處理封裝錯誤
您可以使用事件處理常式,回應封裝以及封裝中的物件所引發的許多事件。
- 建立 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 來識別封裝的執行,但單一清單中若有大量記錄輸出,分析就會變得很困難。
以下是用於增強預設記錄輸出的一個建議方法,讓您能夠輕鬆地產生報表:
建立可記錄封裝每次執行作業的父資料表。 在這個父資料表中,封裝的各次執行作業只能分別記錄在單一資料列,並使用 ExecutionID 連結到 Integration Services 記錄資料表中的子記錄。 您可以在每個封裝的開頭使用執行 SQL 工作,以建立這個新的資料列,並記錄開始時間; 接著再於封裝結尾使用另一個執行 SQL 工作,以結束時間、期間與狀態更新資料列。
將稽核資訊加入資料流程。 您可以使用「稽核」轉換將建立或修改每一個資料列的封裝執行資訊,加入資料流程中的資料列。 「稽核」轉換可提供九項資訊,包括 PackageName 和 ExecutionInstanceGUID。 如需詳細資訊,請參閱 稽核轉換。 為了進行稽核,如果您有想要加入每個資料列的自訂資訊,便可以使用「衍生的資料行」轉換將這項資訊加入資料流程中的資料列。 如需詳細資訊,請參閱 衍生的資料行轉換。
考慮擷取資料列計數資料。 請考慮另外建立資料表以存放資料列計數資訊,在此資料表中,是以封裝的 ExecutionID 識別封裝執行的每個執行個體。 使用「資料列計數」轉換,在資料流程的關鍵點將資料列計數儲存到一系列變數中。 資料流程結束後,請使用執行 SQL 工作將這一系列的值插入資料表中的資料列,以供稍後進行分析及製作報表。
如需此方法的詳細資訊,請參閱 Microsoft 技術白皮書 Project REAL:商業智慧 ETL 設計實務 (英文) 中的<ETL 稽核與記錄>一節。
使用偵錯傾印檔案針對封裝執行進行疑難排解
在 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 作業。
若要連線到 Excel 或 Access 資料來源,SQL Server Agent 需要使用在 TEMP 和 TMP 環境變數所指定之資料夾中有權讀取、寫入、建立和刪除暫存檔的帳戶。
疑難排解 64 位元的問題
- 在 64 位元平台上無法使用某些資料提供者。 特別是,連線到 Excel 或 Access 資料來源所需的 Microsoft Jet OLE DB Provider 沒有 64 位元版本。
疑難排解沒有隨附描述的錯誤
如果您遇到沒有隨附描述的 Integration Services 錯誤,可以在 Integration Services 錯誤和訊息參考中,透過查閱錯誤號碼來找出描述。 此清單這次沒有包含疑難排解資訊。