SQL Server 2008R2 Data Collection磁碟使用量無法正常收集資料除錯

SQL Server 2008R2 Data Collection磁碟使用量無法正常收集資料除錯

 

背景說明 :

日前將一台名為SQL3VM複製一份,將該VM電腦名稱及SQL ServerName都改為SQL2SQL2運作正常,MirrorLog Shipping及複寫都可以正常。由於之前在SQL3已經啟用Data Collection,但後來複製的SQL2的磁碟用量收集一直不正常,都顯示無資料。

clip_image002

檢視記錄檔,似乎跟TSQLQueryCollect這一個封裝有關,錯誤顯示帳號有錯。我們電腦名稱已改為SQL2了但是該錯誤顯示居然是用舊電腦名稱SQL3,所以登入失敗。

clip_image004

連接SQL2Integration Services找出有錯誤發生的封裝。我們找\msdb\DataCollector資料夾,裡面存放的都是Data Collection封裝。由下圖可以看見發生錯誤的封裝TSQLQueryCollect,我們打開它看看是否可以修正登入的帳號。

clip_image006

 

打開封裝點選 連線管理員 ,可以發現右側連線字串內容是空的。發生錯誤的登入帳號並不是寫在這裡。

clip_image008

就在不知如何找出錯誤連線資料的來源在哪時,爬文爬到百敬老師的一篇文

http://byronhu.wordpress.com/2012/04/05/sql-server-%E8%B3%87%E6%96%99%E6%94%B6%E9%9B%86%E6%89%80%E7%94%A8%E7%9A%84-perfcountersupload-package-%E5%85%A7%EF%BC%8C%E5%9B%A0%E7%82%BA-lookup-component-%E8%A6%81%E5%8F%96%E5%9B%9E-performance-coun/

其中一句似乎會取 Data Collector\Generated 目錄下的封裝,所以修改後的封裝要存在此。根據百敬老師寫的內容msdb會取用Data Collector\Generated的封裝,並不是Data Collector底下的封裝。剛剛我們在前幾張圖中的Data Collector\Generated資料夾下有看見一堆包含關鍵字SQL3的封裝,經檢查該錯誤的連線字串就是寫在那些封裝裡面。因此我先將所有含SQL3字串的封裝全部刪除,如下圖。

clip_image010

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

停掉資料收集

clip_image012

 

重新設定資料收集

clip_image014

 

 

 

重設完成

clip_image016

 

再次檢查Data Collector\Generated底下的封裝,如下圖所示,剛剛被刪除的封裝經過我們重設定資料收集的步驟後,SQL Server又將它們產生出來。且此次這些封裝的命名已經變更成正確的ServerName,變為SQL2了,看來成功在望了。

clip_image018

 

開啟其中一個封裝看看,果然連線字串是寫在這裡。所以之前我們開啟的Data Collector資料夾的TSQLQueryCollect封裝應該只是用來當範本,SQL會利用範本產生真正運行的封裝。這些封裝是放在Data Collector\Generated中歐。

clip_image020

 

磁碟使用量的收集紀錄顯示成功歐。

clip_image022

 

 

報表顯示有資料了。

clip_image024

 

本次問題很容易在紀錄檔中發現錯誤的原因(帳號錯了),但花了很多時間找來源,感謝James Fu幫忙分析可能的原因,提供了我一個方向去找出問題。

 

我是ROCK

rockchang@mails.fju.edu.tw