錯誤案例:在Microsoft Virtual PC 2007和一台膝上型電腦上安裝MSDN訂閱下載的SQL Server 2005企業版時出現問題。安裝環境為windows Server 2003 企業版 + sp1,另外一個系統是帶sp2的,安裝使用者使用超級管理員(Administrator)。在安裝“Integration Services”步驟時出現安裝錯誤,提示“錯誤: -2146233087”。
錯誤記錄如下:
標題: Microsoft SQL Server 2005 安裝程式
------------------------------
無法在 COM+ 目錄中安裝和配置程式集 C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll。錯誤: -2146233087
錯誤訊息: Unknown error 0x80131501
錯誤說明: 要執行此任務,您必須具有管理認證。請與您的系統管理員聯絡以獲得協助。
有關協助資訊,請單擊:
go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft
+SQL+Server&ProdVer=9.00.1399.06&EvtSrc=setup.rll&EvtID=
29549&EvtType=sqlca%5csqlassembly.cpp%40Do_sqlAssemblyReg
Svcs%40Do_sqlAssemblyRegSvcs%40x80131501
通過協助資訊的超連結頁面,提示“需要為MS DTC服務配置 Network Service帳戶運行”,不過筆者的MS DTC本來就是在Network Service帳戶下運行。
通過百度和Google搜尋了一下,有不少朋友碰到類似錯誤訊息,不過沒有得到好的解決方式,只好自己尋找線索進行嘗試。可以肯定的是問題應該出現在存取權限,而這方面常見的問題一般都是對檔案系統目錄和系統註冊表的訪問。在微軟的客戶協助和支援網站搜尋SQL Server的相關安裝資訊。有一篇文章提到設定“C:\WINDOWS\Registration”的許可權,確認該目錄以及目錄下的clb和crmlog檔案有完全的讀寫權限,再次安裝SQL Server 2005在“Integration Services”步驟還是提示失敗。在安裝過程中選擇服務帳戶時使用內建系統帳戶或使用域使用者帳戶都一樣。
看來問題沒有這麼簡單,筆者在另外一個系統中安裝時啟用RegMon進行註冊表操作監視,過濾後只監視“msiexec.exe:484”進程,在報以上面提到的錯誤後儲存監視日誌到檔案。
通過監控日誌查看失敗的情況。由於沒有仔細尋找,在後來通過微軟SQL Server組的支援人員工程師才想到問題早應該解決。以下是我事後再次查看RegMon Trace發現的問題故障點,通過下面的日誌看出使用本機Administrator訪問註冊表.HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage項時被拒絕。
11305 32.35072327 msiexec.exe:484 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage ACCESS DENIED NBCN-ZZ\Administrator
11306 32.36096954 msiexec.exe:484 QueryKey HKCU\Software\Classes SUCCESS Name: \REGISTRY\USER\S-1-5-21-730333180-4162487032-3015738926-500_CLASSES
11307 32.36102295 msiexec.exe:484 OpenKey HKCU\Software\Classes\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage NOT FOUND
11308 32.36108017 msiexec.exe:484 OpenKey HKCR SUCCESS
11309 32.36190796 msiexec.exe:484 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage ACCESS DENIED NBCN-ZZ\Administrator
11310 32.36222076 msiexec.exe:484 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.DataFileMessage ACCESS DENIED NBCN-ZZ\Administrator
由於粗心結果又多做了很多工作,查看系統的“元件服務”配置是否有問題,但是沒有發現什麼異常。
在再次出現安裝問題後,這次就直接點擊“忽略”按鈕繼續安裝SQLServer的其他部分,安裝結束後,提示安裝成功完成。
運行“dcomcnfg”,開啟系統元件服務。展開控制台根目錄->元件服務->電腦->我的電腦->COM+應用程式節點,沒有發現Microsoft.SqlServer.MSMQTask節點,可見該COM+應用程式沒有安裝上。
再次運行SQL Server 2005安裝程式進行添加刪除安裝,提示安裝成功,在“元件服務”中看到“Microsoft.SqlServer.MSMQTask”。看來問題解決了,但是那時還不知道問題出在哪裡。卸載SQL Server 2005,發現“Microsoft.SqlServer.MSMQTask”並沒有卸載,測試只安裝SQL Server 2005的Integration Services服務。結果安裝失敗,選擇“中止”取消安裝,再次確認存在“Microsoft.SqlServer.MSMQTask”服務。
接下去筆者把安裝過程中出現的錯誤發送給微軟,請SQL Server 組的支援人員工程師協助解決。在工程師尋找問題過程中,雖然許多檢查點我都做過,不過他尋找分析解決問題的思路清晰,以下我列了大概幾個步驟。