在Windows Server 2003 、Windows XP或者Windows 2000中安裝 SQL SERVER 2008 開發版和企業版時,會遇到“效能計數器註冊表登錄區一致性”檢查失敗 的問題(Windows Server 2008 由於暫時沒有環境,尚未測試)
(圖一)
安裝提示錯誤資訊為:
(圖二)
解決方案:
先根據協助提示,開啟 http://support.microsoft.com/kb/300956, 協助的文檔是讓你使用安裝光碟片重設效能計數器檔案,操作步驟比較複雜,可是我並沒有安裝什麼特殊的軟體,而且確定也沒有病毒感染,為什麼效能計數器會損壞 呢,因此決定不到萬不得已暫時不去重設效能計數器,以免擴大問題的影響面。(Microsoft的Help文檔經常是答非所問....)
果然,經翻閱文檔,發現計數器配置資訊儲存在註冊表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]中
操作步驟:
1. 在 Microsoft Windows 2003 或 Windows XP 案頭上,依次單擊“開始”、“運行”,然後在“開啟”中鍵入 regedit.exe,再單擊“確定”。在 Windows 2000 中,使用 regedt32.exe 啟動登錄編輯程式
2. 定位到以下登錄機碼:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]
"Last Counter"=dword:0000566a(22122) (這個值根據不同的機器各不相同,不是固定值)
"Last Help"=dword:0000566b(22123) (這個值根據不同的機器各不相同,不是固定值)
(圖三)
在圖三中我們看到,Perflib下存在兩個子項目
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]
經過比較,發現在兩個子檔案夾項目下面存在的計數器最大值不同
(圖四)Perflib\004中Counter項目的最大值為22178(這個值根據不同的機器各不相同,不是固定值)
(圖五)Perflib\004中Help項目的最大值為22179(這個值根據不同的機器各不相同,不是固定值)
(圖六)Perflib\009中Counter項目的最大值為22122(這個值根據不同的機器各不相同,不是固定值)
(圖七)Perflib\009中Help項目的最大值為22123(這個值根據不同的機器各不相同,不是固定值)
很顯然,,在我的機器上[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]中
"Last Counter"和"Last Help"這兩項的值,和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]中儲存的最大值是相同的,分別為22122和22123(這兩個數值每台電腦各不相同), 而和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004]中儲存的最大值不相同,正是由於這個差異,造成了SQL Server 2008 安裝過程中遇到“效能計數器註冊表登錄區一致性”檢查失敗的故障。
原因分析:
由於之前安裝過的Visual Studio 2008英文版中所帶的Visual Studio 2005 Express語言版本是英文版,同時又測試安裝了SQL SERVER 2005 Developer Edition簡體中文開發版,之後又卸載了SQL SERVER 2005 Developer Edition簡體中文開發版,打算安裝SQL SERVER 2008 Developer Edition簡體中文開發辦,由於語言的不一致性以及反覆多次的安裝卸載,估計是安裝程式在卸載的時候的錯誤,造成了註冊表中索引值不一致的現象
問題解決:
知道的故障的起因,問題就很好解決了,由於我們使用的是簡體中文版作業系統,所以要保證
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] 中"Last Counter"和"Last Help"這兩項的值與
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004]中"Counter"和"Help"兩項儲存的最大值相同就可以了
如果我們使用的是英文版作業系統,那就要保證
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] 中"Last Counter"和"Last Help"這兩項的值與
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]中儲存的最大值相同就可以了
(圖八)
修改[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] 中"Last Counter"的值,使它和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004] 中"Counter"的最大值保持一致,我們這裡是改為22178
(圖九)
修 改[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] 中"Last Help"的值,使它和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004] 中"Help"的最大值保持一致,我們這裡是改為22179
要注意的是,修改數位時候,必須選擇基數是 “十進位”(預設是十六進位),否則數字將不匹配,SQL SERVER 2008 安裝程式檢查將再次失敗。
(注意:修改註冊表存在一定風險,可能造成您的系統損壞,請先備份註冊表,以備在出現問題後可以恢複。有關如何備份與還原註冊表,請參考Microsoft 知識庫中相應的主題:[322756]如何備份與還原 Windows 註冊表)
測試效果:
然後關閉登錄編輯程式,再次開始安裝 SQL SERVER 2008 Developer Edition簡體中文開發版
(圖十)測試通過,不再出現錯誤,可以正常安裝了
至此,問題徹底解決,而解決方案,只是簡單得修改了兩個註冊表索引值。
總結:
由此可見,在遇到問題時,如果不加思考,完全生搬硬套協助文檔,可能事倍功半,還會引起很多不必要的麻煩,因為協助文檔只是給我們指明了大致的方 向,編寫協助文檔的人也不可能知道我們遇到問題的實際環境,因此協助文檔作為參考是非常有用的,但是遇到問題的時候,我們的實際經驗和動手測試的能力也是 非常重要的,這樣才能少走彎路。
備忘:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]對應c:\windows\system下的8個檔案,如果004和009無法編輯,可從別的電腦直接複製這8個檔案