同事詢問: SQL 2008 R2安裝於Windows 2008 R2上,當SQL服務設定使用網域使用者帳號執行,啟動類型設為"自動",則在重開機時會出現以下錯誤,導致無法自動啟動:

SQL Server (MSSQLSERVER) 服務無法啟動,因為下列錯誤:
這個帳戶名稱不正確或不存在,或指定的帳戶名稱密碼不正確。

若將服務設定為"自動 (延遲開始)"[英文為Automatic (Delayed Start)],或改用本機帳號,則可避開上述問題。但同樣的設定,在Windows 2003 R2上則不會有錯。

由於近幾年OS、DB玩得不多,初步了解狀況後,當下立即決定"閃開! 讓專業的來"--發噗問問臥虎藏龍的噗友們。跟 hunterpo 來回交換了一些資訊,得到很多寶貴的情報!

經他在手邊環境實測,設定網域帳號 + 自動啟動並不會導致SQL Server啟動失敗,所以此問題應另有隱情。原本懷疑硬體規格、網路環境等因素導致系統中某些服務就緒時機不同,而SQL Server啟動時所依賴的某個服務(猜與網域身份認證有關)尚未準備好,因此無法完成網域帳號身份認證,導致啟動失敗。

後來hunterpo提到另一點,他發現先前提到的"自動 (延遲開始)"並不是【SQL組態管理員】(Sql Server Configuration Manager)的選項,懷疑是直接由服務管理介面設定的(犀利的射手推論),並建議由組態管理員統一設定較好。

將這個建議轉給同事後,不久就破案了!

原來故事是這樣的: 同事在設定網域帳號時,習慣用的是user @domain.com 格式,而SQL組態管理員則將其轉成domain\user格式,如此自動啟動便可順利完成。而若用服務管理員將其改回user @domain.com格式,就會再度引發自動啟動時帳號身份認證失敗,由此推論網域帳號的表示法是關鍵。

綜合以上的結果,我推測解析user @domain.com資料時需要額外服務,而此服務在"自動 (延遲開始)"啟動階段才會備妥,因而導致前述問題;而延遲開始是Vista/Win7/Win2008起加入的新特性,將一些啟動耗時且非立即必要的服務晚一點再啟動,以加快Windows開機速度,這或許解釋了Win2003與Win2008的測試結果不同。然而,這個神祕的服務究竟是什麼呢? 世界上只有三個人知道,一個是我,一個是寫服務的人,還有一個人我不能說... (其實是我不知道啦! 若未來搞清楚會向大家公佈)

PS: 嚴格說起來,今天我扮演的不是射手,而是茶包皮條客貿易商的角色,但仍然不減射茶包的樂趣,在此感謝hunterpo提供資訊與建議。


Comments

# by alex

haha, 有趣. 真沒有想到 user @domain.com 跟 domain\user 是有影響的

Post a comment