核心結論
SQL Server 沒有任何操作能透過重啟服務、重啟 Windows、分離附加資料庫來修復資料損壞。損壞的頁面必須透過備份還原、DBCC 修復(可能遺失資料)或頁面層級還原來處理。
分離附加損壞資料庫的嚴重後果
若資料庫已處於可疑狀態,分離附加會導致附加失敗。因為附加過程包含 Crash Recovery,而 Crash Recovery 正是因損壞而無法完成的步驟。結果:資料庫完全無法上線,甚至連緊急模式都進不去。
極少數「重啟看似解決」的情況
- 記憶體頁面損壞、磁碟頁面完好: 重啟後從磁碟重讀,問題消失。
- 損壞頁面在重啟過程中被解除配置: 看似修復,實則資料已遺失。參考〈Misconceptions around corruptions: can they disappear?〉。
- I/O 子系統暫時卡住: 重啟 I/O 子系統後恢復正常,非資料庫層面修復。
正確因應流程
- 擁有經驗證可用的備份策略(完整+記錄/差異)。
- 損壞發生時,優先評估
DBCC CHECKDB 報告,決定:
a) 頁面層級還原(Enterprise/Developer 版)
b) 檔案/檔案組還原
c) 完整資料庫還原 + 記錄備份還原至時間點
d) DBCC CHECKDB (REPAIR_ALLOW_DATA_LOSS) 為最後手段
- 建立高可用架構(Always On AG、鏡像、記錄傳送)縮短 RTO。
警語
永遠不要分離損壞的資料庫。 重啟只是浪費黃金搶修時間,不是解決方案。