首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 無法啟動:錯誤 18052 / 9003 完整排查與修復指南

     編輯:關於SqlServer

錯誤現象

SQL Server 服務啟動失敗,Windows 事件檢視器(系統日誌)記錄:

  • Event ID 17052:無法復原 master 資料庫。正在結束。
  • Event ID 18052:錯誤: 9003,嚴重度: 20,狀態: 1。

錯誤 9003 表示 資料庫記錄檔 (LDF) 損毀或版本不匹配,導致 master 資料庫無法完成復原(Redo/Undo 階段)。常見原因:非正常關機、磁碟壞軌、記錄檔被刪除/移動、版本不相容附掛、防毒軟體鎖定檔案。

方法一:重建 Master 資料庫(官方標準修復)

適用於 SQL Server 2000/2005/2008/2008 R2。SQL Server 2012+ 請使用安裝媒體 Setup.exe /ACTION=REBUILDDATABASE。

步驟詳細說明

  1. 備份現有資料檔:將 MSSQL\Data 目錄更名為 Data_Bak(保留 master.mdf、mastlog.ldf、model.mdf、modellog.ldf、msdbdata.mdf、msdblog.ldf)。
  2. 取得乾淨的系統資料庫範本:
    • 同版本、同版本號(SP/CU)、同語系、同排序規則的另一台伺服器,複製其 Data 目錄下的 master.mdf、mastlog.ldf、model.mdf、modellog.ldf 至任意暫存資料夾(如 C:\Temp\SystemDBs)。
    • 或從安裝媒體 \\Setup\Data\ 取得(SQL 2005/2008)。
  3. 執行 rebuildm.exe (SQL 2000) / Setup.exe (SQL 2005+):
    • SQL 2000:C:\Program Files\Microsoft SQL Server\80\Tools\Binn\rebuildm.exe → 瀏覽指向暫存資料夾 → 重建。
    • SQL 2005/2008/R2:命令列執行
      Setup.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER
          /SQLSYSADMINACCOUNTS="BUILTIN\Administrators"
          /SAPWD="StrongP@ssw0rd"
          /SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS
          /DATADIR="C:\Temp\SystemDBs"   
          /LOGDIR="C:\Temp\SystemDBs"
  4. 重建完成後:啟動 SQL Server 服務。若成功,將 Data_Bak 中的使用者資料庫(.mdf/.ldf)複製回 Data 目錄,並在 SSMS 中 附加。
  5. 處理疑慮資料庫:附加時若顯示「疑慮」或「恢復中」,嘗試:
    ALTER DATABASE [YourDB] SET EMERGENCY;
    ALTER DATABASE [YourDB] SET SINGLE_USER;
    DBCC CHECKDB ([YourDB], REPAIR_ALLOW_DATA_LOSS); -- 最後手段
    ALTER DATABASE [YourDB] SET MULTI_USER;

關鍵注意事項

  • 版本號必須完全一致:SELECT @@VERSION 比對 Build Number(如 9.00.4035.00),否則重建後版本不匹配仍無法啟動。
  • 排序規則必須一致:重建時指定 /SQLCOLLATION 參數,錯誤排序規則會導致使用者資料庫附加失敗。
  • sa 密碼:重建後 sa 密碼為安裝時指定值,請記錄。

方法二:緊急模式修復 Master(不重建,風險較高)

僅在無法重建、無備份、必須嘗試搶救資料時使用。

  1. 以最小配置啟動 SQL Server:
    sqlservr.exe -c -f -T3608 -s MSSQLSERVER
    (-f 最小配置、-T3608 僅復原 master)。
  2. 使用 sqlcmd 連線:
    sqlcmd -S . -E -d master
  3. 嘗試修復 master 記錄檔:
    ALTER DATABASE master SET EMERGENCY;
    ALTER DATABASE master SET SINGLE_USER;
    DBCC CHECKDB (master, REPAIR_REBUILD); -- 僅修復元資料,不丟失資料
    -- 若失敗,最後手段(資料遺失風險):
    -- DBCC CHECKDB (master, REPAIR_ALLOW_DATA_LOSS);
    ALTER DATABASE master SET MULTI_USER;
  4. 正常關閉控制台啟動的 sqlservr,改由服務管理員啟動服務。

方法三:重新安裝 SQL Server(最後手段)

  1. 控制台 → 程式集 → 解除安裝 SQL Server 所有元件(資料庫引擎、用戶端工具、共用功能)。
  2. 手動刪除殘留目錄:
    C:\Program Files\Microsoft SQL Server\
    C:\Program Files (x86)\Microsoft SQL Server\
    C:\Program Files\Microsoft SQL Server\MSSQL.x\(資料目錄若有重要資料請先備份)
  3. 清理登錄(謹慎):HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\、HKLM\SYSTEM\CurrentControlSet\Services\MSSQL*。
  4. 重新安裝相同版本、SP、CU,安裝完成後立即打上相同補丁。
  5. 附加備份的使用者資料庫。

預防與備份策略

措施說明
系統資料庫備份每日備份 master、model、msdb(完整備份 + 交易記錄備份)。master 變更頻率低,每日一次足夠。
啟用資料庫校驗和ALTER DATABASE master SET PAGE_VERIFY CHECKSUM; 早期偵測頁面損毀。
DBCC CHECKDB 定期執行每週對 master、msdb 執行 DBCC CHECKDB WITH NO_INFOMSGS,納入 Agent 作業並設定失敗通知。
硬體監控RAID 控制器事件、SMART 資訊、事件檢視器磁碟錯誤(Event ID 7, 9, 11, 51)即時告警。
防毒軟體排除排除 *.mdf、*.ldf、*.ndf、MSSQL\Data\、MSSQL\Log\、MSSQL\Backup\ 目錄,防止即時掃描鎖定檔案導致損毀。
UPS 與正常關機流程避免斷電導致記錄檔未寫入完畢。

常見誤區與避坑指南

  • 直接刪除 LDF 檔案:會導致 9003/9004 錯誤,資料庫進入疑慮模式。正確做法:ALTER DATABASE ... SET OFFLINE 後再移動檔案,或使用 DBCC REBUILD_LOG(僅限舊版本、極高風險)。
  • 跨版本附加系統資料庫:master/model/msdb 含內部結構版本號,跨版本附加必失敗。
  • 重建後忘記修補 SP/CU:重建會還原至 RTM 版本,必須立即套用相同 Service Pack 與 Cumulative Update。
  • 忽略排序規則:重建時未指定正確 Collation,導致中文資料排序錯誤、附加使用者資料庫失敗。

快速診斷清單

  1. 檢查事件檢視器:確認 17052/18052/9003/823/824/825 錯誤。
  2. 檢查錯誤日誌:MSSQL\Log\ERRORLOG(或 ERRORLOG.1),搜尋 "master"、"9003"、"recovery"。
  3. 檢查磁碟空間與權限:Data/Log 目錄是否滿、服務帳號是否有完整控制權限。
  4. 嘗試單一使用者模式啟動:sqlservr -c -m -s MSSQLSERVER,若能啟動則為使用者資料庫問題,可逐一離線排查。
  5. 決定修復路徑:有備份/同版本範本 → 方法一;無備份但需搶救 → 方法二;均不可行 → 方法三。

掌握上述流程與預防措施,可在遭遇 master 資料庫損毀、錯誤 9003 導致 SQL Server 無法啟動時,有條不紊地完成修復並將損失降至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved