疑難排解封裝執行

更新: 2006 年 12 月 12 日

Integration Services 包含的功能與工具,可讓您在完成及部署封裝之後,用以疑難排解封裝的執行問題。

在設計階段,Business Intelligence Development Studio 會提供中斷點以暫停封裝的執行,並提供 [進度] 視窗及資料檢視器以監視通過資料流程的資料。不過,如果您是執行已經部署的封裝,就無法使用這些功能。以下列出用於疑難排解已部署之封裝的主要技術:

  • 使用事件處理常式擷取及處理封裝錯誤。
  • 使用錯誤輸出擷取不正確的資料。
  • 使用記錄功能追蹤執行封裝的步驟。

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

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

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

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

疑難排解外部資料提供者的問題

與外部資料提供者互動期間發生許多封裝失敗。但是,這些提供者傳回 Integration Services 的訊息經常未提供足夠的資訊,導致無法開始進行互動的疑難排解。為了解決這個疑難排解需要,Microsoft SQL Server 2005 Service Pack 2 (SP2) 包括新的記錄訊息,可供您用來疑難排解封裝與外部資料來源之間的互動。

  • 啟用記錄並選取封裝的 [診斷] 事件以查看新的疑難排解訊息。從 SP2 開始,下列 Integration Services 元件將能夠在每次呼叫外部資料提供者之前和之後,於記錄中寫入訊息:

    • OLE DB 連接管理員、OLE DB 來源和 OLE DB 目的地
    • ADO.NET 連接管理員和 DataReader 來源
    • 執行 SQL 工作
    • 查閱轉換、OLE DB 命令轉換和緩時變維度轉換

    新的記錄訊息包括所呼叫方法的名稱。例如,這些記錄訊息可能包括 OLE DB Connection 物件的 Open 方法,或 Command 物件的 ExecuteNonQuery 方法。這些訊息的格式如下,其中 '%1!s!' 是方法資訊的預留位置:

    ExternalRequest_pre: The object is ready to make the following external request: '%1!s!'.
    ExternalRequest_post: '%1!s!'. The external request has completed.
    

    若要疑難排解與外部資料提供者之間的互動,請檢閱記錄,查看是不是每個「呼叫前」訊息 (ExternalRequest_pre) 都有一個對應的「呼叫後」訊息 (ExternalRequest_post)。如果沒有對應的「呼叫後」訊息,您就知道外部資料提供者並未如預期方式回應。
    下列範例顯示記錄中的一些範例資料列,其中包含新的記錄訊息:

    ExternalRequest_pre: The object is ready to make the following external request: 'ITransactionJoin::JoinTransaction'.
    ExternalRequest_post: 'ITransactionJoin::JoinTransaction succeeded'. The external request has completed.
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Open'.
    ExternalRequest_post: 'IDbConnection.Open succeeded'. The external request has completed.
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.CreateCommand'.
    ExternalRequest_post: 'IDbConnection.CreateCommand finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbCommand.ExecuteReader'.
    ExternalRequest_post: 'IDbCommand.ExecuteReader finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.GetSchemaTable'.
    ExternalRequest_post: 'IDataReader.GetSchemaTable finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.Close'.
    ExternalRequest_post: 'IDataReader.Close finished'. The external request has completed."
    ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Close'.
    ExternalRequest_post: 'IDbConnection.Close finished'. The external request has completed."
    

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

您可以使用可用於許多資料流程元件的錯誤輸出,將包含錯誤的資料列導向不同目的地,以便稍後進行分析。

  • 使用錯誤輸出擷取不正確的資料。將包含錯誤的資料列傳送到不同目的地,例如錯誤資料表或文字檔。錯誤輸出會自動加入兩個數值資料行,一個包含造成資料列遭到拒絕的錯誤編號,另一個包含發生錯誤之資料行的識別碼。如需詳細資訊,請參閱<處理資料中的錯誤>和<如何:在資料流程元件中設定錯誤輸出>。
  • 將易懂資訊加入錯誤輸出。除了錯誤輸出所提供的兩個數值識別碼外,您還可以加入描述性的資訊,讓錯誤輸出更容易分析。
    加入錯誤的描述。使用指令碼元件可以很容易地查閱錯誤描述。如需詳細資訊,請參閱<Enhancing an Error Output with the Script Component>。
    加入錯誤資料行的名稱。在「指令碼」元件中,不容易以錯誤輸出所儲存之資料行識別碼,查閱相對應的資料行名稱,所以需要執行額外的步驟。資料流程中的每一個資料行識別碼,在該資料流程工作內都是獨一無二的識別碼,並且在設計階段會保存於封裝中。以下是將資料行名稱加入錯誤輸出的建議方法:
    1. 建立資料行名稱的查閱資料表。建立會使用 Integration Services API 的個別應用程式,以便反覆查看每個儲存的封裝、封裝中的每個資料流程、資料流程中的每個物件,以及資料流程物件中的每個輸入與輸出。此應用程式應該保存查閱資料表中的資料行識別碼以及每個資料行的名稱,以及保存父資料流程工作的識別碼與封裝識別碼。
    2. 將資料行名稱加入輸出。將「查閱」轉換加入至錯誤輸出,以便查閱在先前步驟中所建立之查閱資料表中的資料行名稱。查閱可以使用錯誤輸出中的資料行識別碼、封裝識別碼 (可在系統變數 System::PackageID 中找到),以及資料流程工作識別碼 (可在系統變數 System::TaskID 中找到)。

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

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

  • 啟用記錄功能。您可以只選取想要擷取其資訊的事件與項目,藉以精簡記錄輸出。如需詳細資訊,請參閱<Integration Services 記錄提供者>和<在封裝中實作記錄>。
  • **選取封裝的 [診斷] 事件以疑難排解提供者問題。**在 SP2 中,有一些新的記錄訊息,可幫助您疑難排解封裝與外部資料來源之間的互動。如需詳細資訊,請參閱本主題中的「疑難排解外部資料提供者的問題」。
  • 增強預設的記錄輸出。每次執行封裝時,記錄功能通常會將資料列附加至記錄目的地。雖然記錄輸出的每一個資料列都會以封裝的名稱和唯一識別碼來識別封裝,並且以唯一的 ExecutionID 來識別封裝的執行,但單一清單中若有大量記錄輸出,分析就會變得很困難。以下是用於增強預設記錄輸出的一個建議方法,讓您能夠輕鬆地產生報表:
    1. 建立可記錄封裝每次執行作業的父資料表。在這個父資料表中,封裝的各次執行作業只能分別記錄在單一資料列,並使用 ExecutionID 連結到 Integration Services 記錄資料表中的子記錄。您可以在每個封裝的開頭使用執行 SQL 工作,以建立這個新的資料列,並記錄開始時間;接著再於封裝結尾使用另一個執行 SQL 工作,以結束時間、期間與狀態更新資料列。
    2. 將稽核資訊加入資料流程。您可以使用「稽核」轉換將建立或修改每一個資料列的封裝執行資訊,加入資料流程中的資料列。「稽核」轉換可提供九項資訊,包括 PackageName 和 ExecutionInstanceGUID。如需詳細資訊,請參閱<稽核轉換>。為了進行稽核,如果您有想要加入每個資料列的自訂資訊,便可以使用「衍生的資料行」轉換將這項資訊加入資料流程中的資料列。如需詳細資訊,請參閱<衍生的資料行轉換>。
    3. 考慮擷取資料列計數資料。請考慮另外建立資料表以存放資料列計數資訊,在此資料表中,是以封裝的 ExecutionID 識別封裝執行的每個執行個體。使用「資料列計數」轉換,在資料流程的關鍵點將資料列計數儲存到一系列變數中。資料流程結束後,請使用執行 SQL 工作將這一系列的值插入資料表中的資料列,以供稍後進行分析及製作報表。

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

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

  • 設定載入封裝時無效之封裝元素的 DelayValidation 屬性。您可以將組態無效之封裝元素的 DelayValidation 設為 True,以避免載入封裝時發生驗證錯誤。例如,您可能有一項會使用目的地資料表的資料流程工作,而這個目的地資料表卻要等到執行 SQL 工作在執行階段建立資料表後才會存在。DelayValidation 屬性可以在封裝層級啟用,也可以在封裝所包含的個別工作和容器層級啟用。
    您可以針對資料流程工作設定 DelayValidation 屬性,但無法針對個別資料流程元件設定這個屬性。將個別資料流程元件的 ValidateExternalMetadata 屬性設為 false,也可以達到類似的效果。不過,當這個屬性的值是 false 時,元件不會察覺對外部資料來源之中繼資料所做的變更。設為 true 時,ValidateExternalMetadata 屬性可以協助避免因資料庫中的鎖定而造成的封鎖問題,尤其是在封裝使用交易時。

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

如果您嘗試使用 SQL Server Agent 執行已部署封裝時發生錯誤,可能此代理程式所使用的帳戶沒有必要權限。如需關於如何疑難排解從 SQL Server Agent 作業執行封裝的資訊,請參閱 Microsoft 支援知識庫文章<從 SQL Server Agent 作業步驟呼叫 SSIS 封裝時,SSIS 封裝未執行>。如需關於如何從 SQL Server Agent 作業執行封裝的詳細資訊,請參閱<排程 SQL Server Agent 中的封裝執行>和<如何:使用 SQL Server Agent 作業執行封裝>。

疑難排解 64 位元的問題

如果您在 64 位元伺服器上執行封裝時發生錯誤,但此封裝可以在 32 位元模式中或 32 位元伺服器上順利執行,請考慮下列常見問題。如需詳細資訊,請參閱<64 位元電腦上的 Integration Services 考量>。

  • 在 64 位元平台上無法使用某些資料提供者。特別是,連接到 Excel 或 Access 資料來源所必須的 Microsoft Jet OLE DB Provider 沒有 64 位元版本。
  • 指令碼必須在 32 位元電腦上先行編譯,才能在 64 位元電腦上使用。在使用指令碼工作或指令碼元件的封裝中,PreCompile 屬性必須設為 True。
  • DTS 封裝無法在 64 位元模式中執行。如果封裝是使用執行 DTS 2000 封裝工作執行 SQL Server 2000 Data Transformation Services (DTS) 封裝,您就必須在 32 位元模式中執行此封裝。64 位元執行階段不支援 DTS 封裝。

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

如果您遇到沒有隨附描述的 Integration Services 錯誤,可以經由查閱錯誤的編號找出列在<Integration Services Error and Message Reference>中的錯誤描述。清單這次沒有包含疑難排解資訊。

請參閱

工作

疑難排解封裝開發

概念

疑難排解封裝效能
疑難排解 Integration Services 服務

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容
  • 新增資訊,說明 SQL Server 2005 SP2 如何包括新的記錄訊息,讓使用者能夠疑難排解外部提供者問題。