Integration Services 包含的功能和工具,可讓您在套件完成並部署之後,用來針對套件進行疑難解答。
在設計階段,SQL Server Data Tools (SSDT) 提供斷點來暫停封包執行、進度視窗和資料查看器,以便在資料通過資料流時檢視您的資料。 不過,當您執行已部署的套件時,無法使用這些功能。 針對已部署套件進行疑難解答的主要技術如下:
使用事件處理程式攔截和處理封裝錯誤。
使用錯誤輸出擷取不正確的數據。
使用記錄來追蹤封裝執行的步驟。
您也可以使用下列秘訣和技術來避免執行套件的問題
協助確保透過使用交易來維持數據完整性。 如需詳細資訊,請參閱 Integration Services 交易。
使用檢查點從失敗點重新啟動套件。 如需詳細資訊,請參閱 使用檢查點來重新啟動封裝。
使用事件處理程式攔截和處理封裝錯誤
您可以使用事件處理程式來回應封裝所引發的許多事件,以及封裝中的物件。
- 建立 OnError 事件的事件處理程式。 在事件處理程式中,您可以使用傳送郵件工作來通知系統管理員失敗、使用腳本工作和自定義邏輯取得系統資訊以進行疑難解答,或清除暫時資源或不完整的輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 事件處理程式。
使用錯誤輸出對不正確的數據進行疑難解答
您可以使用許多數據流元件上可用的錯誤輸出,將包含錯誤的數據列導向至個別目的地,以供稍後分析。
透過錯誤輸出捕獲錯誤數據。 將包含錯誤的數據列傳送至個別目的地,例如錯誤數據表或文本檔。 錯誤輸出會自動新增兩個數值數據行,其中包含導致數據列遭到拒絕的錯誤數目,以及發生錯誤之數據行的標識碼。 如需詳細資訊,請參閱 處理資料中的錯誤。
將友善資訊新增至錯誤輸出。 除了錯誤輸出所提供的兩個數值標識碼之外,您還可以新增描述性資訊,讓您更輕鬆地分析錯誤輸出。
新增錯誤的描述。 使用文稿元件很容易查閱錯誤描述。 如需詳細資訊,請參閱 增強腳本元件的錯誤輸出。
新增錯誤數據行的名稱。 查找錯誤輸出所儲存的欄位 ID 對應的欄位名稱在腳本元件中不容易做到,並且需要額外的步驟。 數據流中的每個數據行標識碼在該數據流工作中都是唯一的,而且會在設計時間保存在封裝中。 下列方法是將數據行名稱新增至錯誤輸出的其中一個建議。
建立欄位名稱的查找表。 建立個別的應用程式,使用 Integration Services API 逐一查看每個已儲存的封裝、封裝中的每個數據流、數據流中的每個物件,以及數據流物件中的每個輸入和輸出。 應用程式應該將每個數據行的數據行標識碼和名稱保存至查閱表格,以及父數據流工作的標識碼和封裝的標識碼。
將資料行名稱新增至輸出。 將查閱轉換新增至錯誤輸出,以查閱在上一個步驟中建立的查閱表格中的欄名稱。 查閱可以使用錯誤輸出中的數據行標識碼、套件標識碼(可在系統變數 System::P ackageID 中使用),以及數據流工作的標識碼(可在系統變數 System::TaskID 中使用)。
使用作業報告對封裝執行進行疑難解答
SQL Server Management Studio 中提供標準作業報告,可協助您監視已部署至 Integration Services 目錄的 Integration Services 套件。 這些套件報告可協助您檢視套件狀態和歷程記錄,並在必要時識別失敗的原因。
如需詳細資訊,請參閱 封裝執行的疑難排解報告。
使用 SSISDB 檢視對封裝執行進行疑難解答
您可以使用許多 SSISDB 資料庫檢視來查詢以監視封裝執行和其他作業資訊。 如需詳細資訊,請參閱 監視封裝執行和其他作業。
使用記錄對套件執行進行疑難排解
您可以啟用記錄來追蹤執行中套件中發生的大部分情況。 記錄提供者會擷取指定事件的相關信息以供稍後分析,並將該資訊儲存在資料庫數據表、一般檔案、XML 檔案或其他支援的輸出格式中。
啟用記錄。 您可以透過挑選僅有您想擷取的事件和資訊項目來優化記錄輸出。 如需詳細資訊,請參閱 Integration Services (SSIS) 記錄 和 Integration Services (SSIS) 記錄。
選取套件的診斷事件,以針對提供者問題進行疑難解答。 有記錄訊息可協助您針對套件與外部數據源的互動進行疑難解答。 如需詳細資訊,請參閱 疑難解答工具套件連線問題。
增強預設記錄輸出。 每次執行套件時,日誌記錄通常會將行附加至記錄目標位置。 雖然記錄輸出的每個數據列都會依其名稱和唯一標識符來識別封裝,而且也會透過唯一的 ExecutionID 來識別封裝的執行,但是單一清單中的大量記錄輸出可能會變得難以分析。
下列方法是增強默認記錄輸出的其中一個建議,可讓您更輕鬆地產生報告:
建立父數據表,以記錄封裝的每個執行。 這個父資料表對於每次執行封包只有一個列,並使用ExecutionID連結至Integration Services 日誌資料表中的子記錄。 您可以在每個封裝的開頭使用「執行 SQL」工作來建立這個新數據列,並記錄開始時間。 然後,您可以在封裝結尾使用另一個執行 SQL 工作,以更新某一行的結束時間、持續時間和狀態。
將稽核資訊新增至數據流。 您可以使用稽核轉換,將資訊新增至數據流中的數據列,以瞭解建立或修改每個數據列的封裝執行。 稽核轉換提供九項資訊,包括 PackageName 和 ExecutionInstanceGUID。 如需詳細資訊,請參閱 稽核轉換。 如果您有想要納入每個數據列的自訂資訊以供稽核之用,您可以使用衍生的數據行轉換,將這項資訊新增至數據流中的數據列。 如需詳細資訊,請參閱 衍生的資料行轉換。
請考慮擷取行數數據。 請考慮為數據列計數資訊建立個別的數據表,其中每個封裝執行實例都會由其 ExecutionID 來識別。 使用「列數計算轉換」功能,將列數儲存到數據流中關鍵點的一系列變數中。 數據流結束后,請使用執行 SQL 工作,將數列值插入數據表中的數據列,以供稍後分析和報告使用。
如需此方法的詳細資訊,請參閱Microsoft白皮書《
商業智慧 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位平臺上使用。 特別是 64 位版本無法使用連線至 Excel 或 Access 數據源所需的 Microsoft Jet OLE DB 提供者。
針對沒有描述的錯誤進行疑難解答
如果您遇到沒有隨附描述的 Integration Services 錯誤,您可以在 Integration Services 錯誤和訊息參考 中依錯誤編號查閱以找到描述。 此清單目前不包含疑難解答資訊。