SQL Server Integration Services 包含記錄提供者,可用來在封裝、容器和工作中實作記錄。 透過記錄,您可以收集執行時的套件資訊,協助您在每次執行套件時稽核和疑難解答。 例如,記錄檔可以擷取執行封裝的作員名稱,以及封裝開始和完成的時間。
您可以設定在 Integration Services 伺服器上封裝執行期間發生的記錄範圍。 如需詳細資訊,請參閱 在 SSIS 伺服器上啟用封裝執行的記錄功能。
您也可以在使用 dtexec 命令列工具執行封裝時,包含記錄。 如需支持記錄之命令提示字元自變數的詳細資訊,請參閱 dtexec 公用程式。
在 SQL Server Data Tools 中設定記錄
記錄會與封裝相關聯,且設定在封裝層級。 封裝中的每個工作或容器都可以將資訊記錄到任何套件記錄檔。 封裝中的工作和容器可以啟用記錄功能,即使封裝本身沒有啟用。 例如,您可以在「執行 SQL」工作上啟用記錄,而不需在父套件上啟用記錄。 封裝、容器或工作可以寫入多個記錄。 您可以只啟用封裝的記錄功能,或者您可以選擇在封裝所包含的任何個別工作或容器上啟用記錄功能。
當您將記錄新增至封裝時,您可以選擇記錄提供者和記錄檔的位置。 記錄提供者會指定記錄數據的格式:例如,SQL Server 資料庫或文本檔。
Integration Services 包含下列記錄提供者:
文字檔記錄提供者,將日誌項目以逗號分隔值(CSV)格式寫入 ASCII 文字檔。 此提供者的默認擴展名為 .log。
您可以使用 SQL Server Profiler 檢視由 SQL Server Profiler 記錄提供者寫入的追蹤。 此提供者的默認擴展名為 .trc。
備註
您無法在以 64 位模式執行的套件中使用 SQL Server Profiler 記錄提供者。
SQL Server 記錄提供者,會將記錄專案寫入 SQL Server 資料庫中的
sysssislog
資料表。Windows 事件記錄提供者,將條目寫入本機電腦上的 Windows 事件日誌中的應用程式記錄。
XML 檔案記錄提供者,會將記錄檔寫入 XML 檔案。 此提供者的預設副檔名為 .xml。
如果您將記錄提供者新增至封裝或以程式設計方式設定記錄,您可以使用 ProgID 或 ClassID 來識別記錄提供者,而不是使用 SSIS 設計工具在 [ 設定 SSIS 記錄 ] 對話框中顯示的名稱。
下表列出 Integration Services 所包含之記錄提供者的 ProgID 和 ClassID,以及記錄提供者寫入記錄檔的位置。
記錄提供者 | ProgID(程式識別碼) | 類別識別碼 | 地點 |
---|---|---|---|
文字檔 | DTS.LogProviderTextFile | {0A039101-ACC1-4E06-943F-279948323883} | 記錄提供者使用的檔案連接管理員會指定文字文件的路徑。 |
SQL Server Profiler | DTS.LogProviderSQLProfiler | {E93F6300-AE0C-4916-A7BF-A8D0CE12C77A} | 記錄提供者使用的檔案連接管理器會指定 SQL Server Profiler 所使用的檔案路徑。 |
SQL Server | DTS.LogProviderSQLServer | {94150B25-6AEB-4C0D-996D-D37D1C4FDEDA} | 記錄提供者使用的 OLE DB 連接管理員會指定包含 sysssislog 記錄專案表的 SQL Server 資料庫。 |
Windows 事件記錄檔 | DTS.LogProviderEventLog | {071CC8EB-C343-4CFF-8D58-564B92FCA3CF} | Windows 事件查看器中的應用程式記錄檔包含 Integration Services 記錄資訊。 |
XML 檔案 | DTS.LogProviderXMLFile | {440945A4-2A22-4F19-B577-EAF5FDDC5F7A} | 記錄提供者使用的檔案連接管理器會指定 XML 檔案的路徑。 |
您也可以建立自訂記錄提供者。 如需詳細資訊,請參閱 建立自定義記錄提供者。
封裝中的記錄提供者是封裝記錄提供者集合的成員。 當您使用 SSIS 設計工具建立封裝並實作記錄時,您可以在 [SSIS 設計工具] 的 [封裝總管] 索引標籤上,看到 [記錄提供者] 資料夾中的集合成員清單。
您可以提供記錄提供者的名稱和描述,並指定記錄提供者所使用的連接管理員,以設定記錄提供者。 SQL Server 記錄提供者會使用 OLE DB 連接管理員。 文本檔、SQL Server Profiler 和 XML 檔案記錄提供者全都使用檔案連接管理員。 Windows 事件記錄提供者不會使用連接管理員,因為它會直接寫入 Windows 事件記錄檔。 如需詳細資訊,請參閱 OLE DB 連接管理員 和 檔案連接管理員。
記錄自定義
若要自訂事件或自訂訊息的日誌記錄,Integration Services 提供一種通常記錄於日誌資訊中的架構,以納入日誌條目中。 Integration Services 記錄架構會定義您可以記錄的資訊。 您可以從每個記錄項目的記錄架構中選取元素。
封裝及其容器和工作不需要記錄相同的資訊,而相同封裝或容器內的工作可以記錄不同的資訊。 例如,封裝可以在封裝啟動時記錄作員資訊、一個工作可以記錄工作失敗的來源,而另一個工作可以在發生錯誤時記錄資訊。 如果封裝及其容器和工作使用多個記錄,則相同的資訊會寫入所有記錄。
您可以指定要記錄的事件,以及針對每個事件記錄的資訊,來選取符合您需求的記錄層級。 您可能會發現某些事件提供比其他事件更有用的資訊。 例如,您可能只想要記錄 PreExecute 事件的電腦和運算子名稱,但 Error 事件的所有可用資訊。
若要防止記錄檔使用大量的磁碟空間,或避免過度記錄,這可能會降低效能,您可以選取要記錄的特定事件和資訊專案來限制記錄。 例如,您可以設定記錄檔,只擷取每個錯誤的日期和計算機名稱。
在 SSIS 設計工具中,您可以使用 [設定 SSIS 記錄 ] 對話方塊來定義記錄選項。
記錄架構
下表描述記錄架構中的元素。
元素 | 說明 |
---|---|
計算機 | 發生記錄事件的計算機名稱。 |
操作員 | 啟動套件的使用者身分識別。 |
源名稱 | 發生記錄事件的容器或工作名稱。 |
來源識別碼 | 封裝的唯一識別碼;For 迴圈、Foreach 迴圈或序列容器;或發生記錄事件的任務。 |
ExecutionID | 封裝執行實例的 GUID。 注意:執行單一套件可能會為 ExecutionID 元素建立具有不同值的記錄專案。 例如,當您在 SQL Server Data Tools 中執行封裝時,驗證階段可能會建立具有與 SQL Server Data Tools 相對應的 ExecutionID 元素的記錄項目。 不過,執行階段可能會產生包含對應於 dtshost.exe的 ExecutionID 元素的日誌條目。 例如,當您執行包含「執行封裝」工作的封裝時,每個工作都會執行子封裝。 這些子封裝可能會建立記錄專案,其ExecutionID元素與父封裝所建立的記錄專案的ExecutionID元素不同。 |
訊息文本 | 與日誌條目相關聯的一則訊息。 |
資料字節 | 與日誌條目相關的位元組陣列。 此欄位的意義會因記錄項目而異。 |
下表描述記錄架構中三個其他元素,這些元素無法在 [設定 SSIS 記錄] 對話方塊的 [詳細資料] 索引標籤上使用。
元素 | 說明 |
---|---|
開始時間 | 容器或工作開始執行的時間。 |
結束時間 | 容器或工作停止執行的時間。 |
DataCode | 選擇性整數值,通常包含列舉中的值 DTSExecResult ,指出執行容器或工作的結果: 0 - 成功 1 - 失敗 2 - 已完成 3 - 已取消 |
日誌條目
Integration Services 支援預定事件的日誌紀錄,並為多個 Integration Services 對象提供自訂日誌紀錄。 SSIS 設計工具中的 [ 設定 SSIS 記錄 ] 對話框會列出這些事件和自定義記錄專案。
下表描述預先定義的事件,這些事件可在執行時事件發生時寫入日誌條目。 這些日誌條目適用於可執行檔、軟體包,以及該軟體包所包含的任務和容器。 記錄專案的名稱與引發並導致寫入記錄專案之運行時間事件的名稱相同。
事件 | 說明 |
---|---|
OnError | 發生錯誤時寫入日誌條目。 |
OnExecStatusChanged | 在偵錯期間,當某個任務(非容器)被暫停或恢復時,會寫入日誌條目。 |
OnInformation | 在驗證和執行可執行文件的過程中寫入日誌條目,以報告資訊。 |
OnPostExecute | 在可執行檔完成運行後,立即寫入日誌條目。 |
OnPostValidate | 當可執行文件的驗證完成時,寫入日誌項目。 |
OnPreExecute | 在可執行檔執行之前,立刻寫入日誌條目。 |
OnPreValidate | 當可執行文件的驗證開始時,寫入日誌條目。 |
OnProgress | 當可執行文件取得可測量的進展時,寫入日誌條目。 |
OnQueryCancel | 在任何可行的時機點寫入日誌項目,以便可以取消任務處理的執行。 |
OnTaskFailed | 當任務失敗時,寫入日誌條目。 |
變數值變更時 | 當變數的值變更時,寫入日誌條目。 |
OnWarning | 發生警告時寫入記錄條目。 |
PipelineComponentTime | 針對每個資料流元件,寫入驗證和執行各階段的日誌條目。 日誌條目記錄了每個階段的處理時間。 |
診斷 | 寫入提供診斷資訊的日誌。 例如,您可以在每次呼叫外部數據提供者之前和之後記錄訊息。 如需詳細資訊,請參閱 封裝執行疑難解答工具。 |
套件和許多任務都有可啟用以記錄的自訂記錄項目。 例如,Send Mail 工作會提供 SendMailTaskBegin 自訂日誌項目,記錄 Send Mail 工作開始執行時的資訊,但在工作傳送電子郵件訊息之前。 如需詳細資訊,請參閱 記錄的自定義訊息。
區別套件複本
記錄數據報含記錄專案所屬封裝的名稱和 GUID。 如果您藉由複製現有的套件來建立新的套件,也會複製現有封裝的名稱和 GUID。 因此,您可能有兩個具有相同 GUID 和名稱的套件,因此很難區分記錄數據中的套件。
若要消除這種模棱兩可的情況,您應該更新新套件的名稱和 GUID。 在 SQL Server Data Tools (SSDT) 中,您可以在屬性窗口中重新產生 ID
的 GUID,並更新 Name
屬性的值。 您也可以以程式設計方式變更 GUID 和名稱,或使用 dtutil 命令提示字元。 如需詳細資訊,請參閱 設定封裝屬性 和 dtutil 公用程式。
父母記錄選項
工作和 For 迴圈、Foreach 循環和時序容器的記錄選項經常符合封裝或父容器的記錄選項。 在此情況下,您可以將它們設定為從其父容器繼承其記錄選項。 例如,在包含「執行 SQL」工作的 For 迴圈容器中,「執行 SQL」工作可以使用 For Loop 容器上設定的記錄選項。 若要使用父記錄選項,您可以將容器的LoggingMode屬性設定為 UseParentSetting。 您可以在 SQL Server Data Tools (SSDT) 的 [ 屬性 ] 視窗中,或透過 SSIS 設計師中的 [ 設定 SSIS 記錄 ] 對話框來設定此屬性。
記錄範本
在 [ 設定 SSIS 記錄 ] 對話框中,您也可以建立和儲存常用的記錄組態做為範本,然後使用多個封裝中的範本。 這可讓您輕鬆地將一致的記錄策略套用至多個套件,並藉由更新並套用範本來修改套件上的記錄設定。 範本會儲存在 XML 檔案中。
在「設定 SSIS 記錄」對話框中進行記錄設定
啟用封裝及其記錄工作。 記錄可能發生在封裝、容器和工作層級。 您可以為封裝、容器和工作指定不同的記錄。
選擇日誌提供者,並為該套件新增日誌。 記錄只能在封裝層級建立,而工作或容器必須使用針對封裝建立的其中一個記錄。 每個記錄檔都與下列其中一個記錄提供者相關聯:文本檔、SQL Server Profiler、SQL Server、Windows 事件記錄檔或 XML 檔案。 如需詳細資訊,請參閱 在 SQL Server Data Tools 中啟用封裝記錄功能。
選取您要在記錄檔中擷取之每個事件的事件和記錄架構資訊。 如需詳細資訊,請參閱 使用已儲存的組態檔設定記錄。
記錄提供者的設定
您可以透過 SSIS 設計師或以程式設計方式設定屬性。
在封裝中實施記錄時,會先建立並設定一個記錄提供者。 如需更多資訊,請參閱整合服務記錄功能。
建立記錄提供者之後,您可以在 SQL Server Data Tools (SSDT) 的 [屬性] 視窗中檢視和修改其屬性。
如需以程式設計方式設定這些屬性的詳細資訊,請參閱 LogProvider 類別的文件。
資料流任務的日誌記錄
資料流程任務提供許多自訂記錄項目,可用來監控和調整效能。 例如,您可以監視可能造成記憶體流失的元件,或追蹤執行特定元件所需的時間。 如需這些自定義記錄項目的清單和範例記錄輸出,請參閱 數據流工作。
使用 PipelineComponentTime 事件
也許最具實用性的自定義日誌條目是 PipelineComponentTime 事件。 此記錄項目會報告數據流中每個元件花費在五個主要處理步驟中的毫秒數。 下表描述這些處理步驟。 Integration Services 開發人員會辨識這些步驟為 PipelineComponent 的主要方法。
步驟 | 說明 |
---|---|
驗證 | 元件會檢查有效的屬性值和組態設定。 |
預執行 | 元件會在開始處理數據列之前執行一次性處理。 |
PostExecute | 元件會在處理所有數據列之後執行一次性處理。 |
ProcessInput | 轉換或目的地元件會處理由上游來源或轉換傳遞給它的傳入數據列。 |
PrimeOutput | 來源或轉換元件會填入要傳遞至下游轉換或目的地元件的數據緩衝區。 |
當您啟用 PipelineComponentTime 事件時,Integration Services 會針對每個元件所執行的每個處理步驟記錄一則訊息。 下列記錄項目會顯示 Integration Services CalculatedColumns 封裝範例記錄的訊息子集:
The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.
The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.
The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.
The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.
The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.
The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).
The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).
The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).
這些記錄項目顯示數據流工作在下列步驟上花費最多時間,如下所示,依遞減順序顯示:
名為 「擷取數據」的 OLE DB 來源花費 688 毫秒載入數據。
名為 「Calculate LineItemTotalCost」 的衍生數據行轉換花費了 356 毫秒,對傳入的數據列執行計算。
名為「Sum Quantity and LineItemTotalCost」的匯總轉換在 PrimeOutput 中共花費了 220 毫秒,計算花費了 141 毫秒,在 ProcessInput 中花費了 79 毫秒,並將數據傳遞至下一個轉換。
相關工作
下列清單包含主題的連結,示範如何執行與記錄功能相關的工作。
相關內容
用於完整和詳細記錄的 DTLoggedExec 工具(CodePlex 專案)