搜尋本站文章

2010-07-03

[SSIS]:設定封裝執行「記錄(Logging)」的「文字檔的 SSIS 記錄提供者」,讓其產生的檔案名稱能夠依據系統時間自動變更

SQL Server Integration Services 包括可用於在封裝、容器和工作中實作「記錄(Logging)」的「記錄提供者(Log Provider)」。
使用記錄,可以擷取有關封裝的執行階段資訊,藉此幫助您在每次執行封裝時對其進行稽核和疑難排解。
例如,記錄可以擷取執行封裝之操作員的名稱,以及封裝開始和結束的時間。


在使用記錄提供者的文字檔,依據預設值是一個固定的檔案名稱。
但在某些環境下,若希望能夠自定其檔案名稱,會是更加彈性的作法。


實作練習

目標:
設定封裝執行「記錄(Logging)」的文字檔,其檔名能夠依據系統時間自動變更。

實作步驟:

工作1:設定封裝的「記錄(Logging)」

步驟01. 在封裝內,點選「控制流程」。

步驟02. 在上方的工具選單,選擇「SSIS」\「記錄」。
步驟03. 在「設定記錄」視窗,點選「提供者與記錄」頁籤。

步驟04. 在「加入新記錄」區域,在「提供者類型」方塊,下拉選取「文字檔的 SSIS 記錄提供者」。
再點選「加入」。

步驟05. 在「選取用於容器的記錄」區域,在「名稱」方塊,勾選「文字檔的 SSIS 記錄提供者」。
步驟06. 在「組態」方塊,點選下拉,選擇「新增連接」。

步驟07. 在「檔案連接管理員編輯器」視窗, 在「使用類型」方塊,下拉選擇「建立檔案」。
步驟08. 在「方塊」,點選「瀏覽」,設定要此記錄檔案要存放的路徑與完整檔名。

步驟09. 點選「確定」,關閉「檔案連接管理員編輯器」視窗。

工作2:設定文字檔的連線字串
步驟01. 在下方的「連接管理員」,點選先前所建立的連接,滑鼠右鍵,選擇「屬性」。
步驟02. 在此連接的「屬性」視窗, 點選「Expressions」的...圖示。
請參考下圖所示:




步驟03. 在「屬性運算式編輯器」視窗,在「屬性」區域,下拉選取「ConnectionString」。
請參考下圖所示:



步驟04. 在「屬性」區域,點選...圖示。
步驟05. 在「運算式產生器」視窗,在中間的「運算式」區域,輸入以下的範例程式碼。
請參考下圖所示



--EX1. 完整檔案名稱的範例:C:\myAdmin\2010070315312540.log
-- 精確度到年、月、日、小時、分、秒、0.01 秒。
"C:\\myAdmin\\"+ SUBSTRING( (DT_WSTR,30) GETDATE(),1, 4 )+SUBSTRING( (DT_WSTR,30) GETDATE(),6, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),9, 2 )+ SUBSTRING( (DT_WSTR,30) GETDATE(),12, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),15, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),18, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),21, 2 )+".log"

--EX2. 完整檔案名稱的範例:C:\myAdmin\20100704094021.log
-- 精確度到年、月、日、小時、分、「10 秒」。
"C:\\myAdmin\\"+ SUBSTRING( (DT_WSTR,30) GETDATE(),1, 4 )+SUBSTRING( (DT_WSTR,30) GETDATE(),6, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),9, 2 )+ SUBSTRING( (DT_WSTR,30) GETDATE(),12, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),15, 2 )+SUBSTRING( (DT_WSTR,30) GETDATE(),18, 1 )+".log"

--EX3. 完整檔案名稱的範例:C:\myAdmin\2010110511164.log
-- 精確度到年、月、日、小時、分、「10 秒」。
"C:\\myAdmin\\"+ REPLACE( REPLACE( REPLACE( SUBSTRING( (DT_WSTR, 30)  GETDATE(), 1, 18 ) , "-", "" ), " ", "" ), ":", "" ) +".log"

上述的範例,其精確度是到「0.01 秒」。
步驟06. 點選「評估運算式」,可以預覽產生的完整檔案名稱等資料。
步驟07. 點選「確定」,關閉「運算式產生器」視窗。


步驟08. 點選「確定」,關閉「屬性運算式編輯器」視窗。
步驟09. 執行此封裝。


步驟10. 執行「檔案總管」,檢查所產生的檔案。
請參考下圖所示:








但比較麻煩的是,每次執行此封裝,都會產生個記錄檔案。
前兩個檔案,僅有檔頭,沒有放資料。
第三個檔案才有存放記錄的資料。


這可能是因為精確度到「0.01 秒」的緣故。
若是調整其精確度為「10 秒」,並加上自定的字串,或許就可以避開這類的問題。

1 則留言:

  1. 有趣的是似乎不只三個,我加了多幾個 Task 都有用到資料連結,似乎就會再多幾個 Log File。看來在 Validate 後,會關閉 Log File,而後再開啟 Log File,但已經超過零點零幾秒,所以透過設定再開啟時,又是另一個 Log File

    回覆刪除