2010年6月10日星期四

Windows Vista / 7 / Server 2008 不能安裝SQL Server 2008 R2解決方法

今天剛安裝好Windows 7後,去Windows Update完全更新後,就下載SQL Server 2008,我的版本是Express R2 64Bit中文版本,但安裝時出現程式錯誤,而且是強行關閉那種,我執行安裝程式的System Configuration Checker,發現出現一個錯誤 : PerfMonCounterNotCorruptedCheck

中文版Error Message :
檢查現有的效能計數器登錄區是否一致。效能計數器登錄區已損毀。若要繼續,您必須修復效能計數器登錄區。如需詳細資訊,請參閱 http://support.microsoft.com/kb/300956。

英文版Error Message :
Checks if existing performance counter registry hive is consistent. The performance counter registry hive is corrupted. To continue, you must repair the performance counter registry hive. For more information, see http://support.microsoft.com/kb/300956.

我唯有試試32Bit版本,結果依然,再試之前原先在Vista上使用的非R2英文版本,竟然錯誤都一樣。



於是我就去http://support.microsoft.com/kb/300956看看,老實說,MS提供的解決方法極度複雜。
我唯有上Google Search "PerfMonCounterNotCorruptedCheck",果然有很多人都有同樣問題,亦有很多不同的建議,但我試過了都不行。
甚至很多人說在[執行]以下的會成功,我都不行。
lodctr /R:PerfStringBackup.INI 

綜合不同受害者的結論,花了幾個小時去研究,最後發現這是Windows語言版本問題,所以為什麼依據別人的方法都不能解決問題。

首先大家要知道我的OS是Windows 7 Ultimate 64Bit 香港中文版 (請注意"香港中文版"了,這是關鍵!)
而問題成因的效能計數器登錄區是藏在registry中的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Perflib\

細看之下,裡面只有[009]和[0404]兩個項目,而大家大概都知道這是LCID,"009"代表英文,"0404"代表台灣中文,那香港中文的"0C04"呢?
假如SQL Server安裝程式會檢查我的OS語系的話,應該大概就是因為這樣沒有"0C04"而錯誤吧?
那我新建一個"0C04"項目,直接由"0404"人手Copy&Paste過"0C04"再重新開機。



再次試試安裝中文版,依然都是一樣,但試英文版64Bit時,竟然可以完成安裝,而且用了兩天都沒有問題。
所以解決方法很明顯就是新建一個自己Windows語系的LCID。
雖然中文版未解決,但我亦覺得用英文版本都沒有所謂。

這是一個十分奇怪的Bugs,當我上網找答案時,連台灣中文的用家都說有這問題,甚至日文,英文,德文的用家都有出現,全部都有一個共同點就是使用Windows Vista / 7 / 2008 Server,顯然這是一個Vista核心在特定情況才出現的Bugs。
但我的Windows 7是Clean Install,只是上了Windows Update的Patch,Windows 7是由MSDN Subscription下載的,所以我個人幾乎肯定香港中文用戶90%會中招。

2010-11-29更新
發現台灣網友同樣出現這個問題,他們都有提供自家的解決方法。
大家可以去參考一下:
安裝MS SQL Server時發生 效能計數器登錄區一致性的錯誤
Win7上安裝SQL2008 效能計數器登錄區一致性的錯誤解決辦法

1 則留言:

  1. [...] 細看之下連SQL Server 2008 Express中文版都抽起了,不過SQL Express 2008要回收,我不感意外,原因請看Windows Vista / 7 / Server 2008 不能安裝SQL Server 2008 R2解決方法 [...]

    回覆刪除