[SSIS]SSIS 封裝的「紀錄 (Logging)」失效了 ?
雖然在 SQL Server 2012 之後,提供了專案部屬模式 ( 可參考 Blog ),讓我們在執行和查看封裝的執行紀錄非常的方便。但剛好手邊有個舊封裝升級,還在使用封裝部屬模式,因此有同事需要去記錄封裝內每一個 Task 的執行時間,因此就建議他使用 SSIS 的「紀錄 (Logging)」,來方便了解封裝的執行過程。
基本上要設定是很容易的,只要選擇選單上的「SSIS」→「紀錄」
開啟設定作業之後,基本上要設定兩項設定,分別是「紀錄提供者」和「事件」。紀錄提供者基本上就是設定你所要記錄的 Log 要存放的地方,一共有五種可以選擇,一般可以選擇第一種文字檔的方式來做紀錄。
選好之後,按下旁邊的「加入」,就會加入到下方,此時要記得選擇設定「組態」,設定要存放的檔案目錄和名稱。接下來要勾選你所要記錄的容器,如果想針對特定的 Task 去紀錄,可以一個一個去選擇,或者是直接選擇 Package,這樣他下面的全部都會被記錄了。
而接著就要去記錄你所要記錄的事件,一般來說我通常都記錄 PreExecute 和 PostExecute,這樣就可以從這兩個來算出每一個 Task 耗用的時間了。如果有些資訊你不想記錄下來,也可以透過下方「進階」的按鈕去設定所要記錄的資訊。基本上有些工作(Task) 會有不同的事件被記錄,因此如果要針對個別工作設定,可以在工作前面目前灰色的勾選項目,重新點選一次,就可以針對該工作去做紀錄了。
輸出結果
而在跟同事說明之後,原本以為就可以順利的去做紀錄了,但沒有想到同事說執行完畢有看到紀錄檔案,但檔案裏面是空的 ? 正常來說應該不會有這樣的狀況才對啊,因此看一下他的設定。因為產生到文字檔的格式有點雜亂,需要放到 Excel 內去處理,因此同事就多增加了一個 SQL Server Profile 的記錄檔,但只要多加這個之後,就只會有個空檔案,而沒有任何紀錄了。
查看 MSDN 上面的說明 (網址),有個特別醒目的提醒,在 64 位元下無法使用 SQL Server Profile 當成 SSIS 的 Log
因此如果要能正常紀錄,一個是把 Log 裡面的 SQL Server Profile 給刪除,一個就是設定使用 32 位元的方式去執行。但因為改成 32 位元勢必跟真正的執行狀況不同,因此決定使用前者的方式,把 SQL Server Profile 的設定給刪除,刪除之後再重新執行,就可以正常產出紀錄了。
基本上這個主要是跟舊版本相容,如果可以的話,在 SQL Server 2012 上,還是建議使用專案部屬模式,這樣就不用去煩惱這些紀錄了。