SQL Server 2008R2 Data Collection磁碟使用量無法正常收集資料除錯
背景說明 :
日前將一台名為SQL3的VM複製一份,將該VM電腦名稱及SQL ServerName都改為SQL2,SQL2運作正常,Mirror跟Log Shipping及複寫都可以正常。由於之前在SQL3已經啟用過Data Collection,但後來複製的SQL2的磁碟用量收集一直不正常,都顯示無資料。
檢視記錄檔,似乎跟TSQLQueryCollect這一個封裝有關,錯誤顯示帳號有錯。我們電腦名稱已改為SQL2了但是該錯誤顯示居然是用舊電腦名稱SQL3,所以登入失敗。
連接SQL2的Integration Services找出有錯誤發生的封裝。我們找\msdb\DataCollector資料夾,裡面存放的都是Data Collection封裝。由下圖可以看見發生錯誤的封裝TSQLQueryCollect,我們打開它看看是否可以修正登入的帳號。
打開封裝點選 連線管理員 ,可以發現右側連線字串內容是空的。發生錯誤的登入帳號並不是寫在這裡。
就在不知如何找出錯誤連線資料的來源在哪時,爬文爬到百敬老師的一篇文
其中一句似乎會取 Data Collector\Generated 目錄下的封裝,所以修改後的封裝要存在此。根據百敬老師寫的內容msdb會取用Data Collector\Generated的封裝,並不是Data Collector底下的封裝。剛剛我們在前幾張圖中的Data Collector\Generated資料夾下有看見一堆包含關鍵字SQL3的封裝,經檢查該錯誤的連線字串就是寫在那些封裝裡面。因此我先將所有含SQL3字串的封裝全部刪除,如下圖。
停掉資料收集
重新設定資料收集
重設完成
再次檢查Data Collector\Generated底下的封裝,如下圖所示,剛剛被刪除的封裝經過我們重設定資料收集的步驟後,SQL Server又將它們產生出來。且此次這些封裝的命名已經變更成正確的ServerName,變為SQL2了,看來成功在望了。
開啟其中一個封裝看看,果然連線字串是寫在這裡。所以之前我們開啟的Data Collector資料夾的TSQLQueryCollect封裝應該只是用來當範本,SQL會利用範本產生真正運行的封裝。這些封裝是放在Data Collector\Generated中歐。
磁碟使用量的收集紀錄顯示成功歐。
報表顯示有資料了。
本次問題很容易在紀錄檔中發現錯誤的原因(帳號錯了),但花了很多時間找來源,感謝James Fu幫忙分析可能的原因,提供了我一個方向去找出問題。
我是ROCK
rockchang@mails.fju.edu.tw