SQL Server 資料庫顯示 Recovery Pending 或 Suspect:如何安全復原而不擴大資料損毀?

Recovery Pending 和 Suspect 說明資料庫無法完成復原。應先保護檔案和日誌,檢查 I/O、空間、權限與錯誤號,再決定還原或修復。

先控制風險,再實施變更建議先在測試環境或單一對象上驗證,保存設定、日誌和可復原備份。涉及生產切換、批次策略、資料庫修復或儲存重建時,應設定維護時段和明確復原條件。

1. 結論與適用範圍

資料庫狀態異常是結果,不是根因。儲存掉線、磁盤壞塊、權限變化、日誌檔案丟失、空間不足、異常關機和底層檔案系統錯誤都可能觸發。首先要停止反復附加、脫機和修復操作,保存現場並確定是否存在可用備份。

該問題涉及 SQL Server、ERP、資料庫復原或版本遷移。任何高風險操作前都應保留可驗證備份。

2. 需要優先關注的風險信號

  • 資料庫狀態為 RECOVERY_PENDING、SUSPECT 或 EMERGENCY,應用程式全部無法連線。
  • ERRORLOG 出現 823、824、825、9001、5120、5173 等 I/O 或檔案錯誤。

3. 遷移或處理前的檢查清單

  1. 複寫並保護 MDF、NDF、LDF 和 ERRORLOG,記錄當前時間、磁盤和服務狀態。
  2. 檢查 Windows 系統/應用程式事件、儲存控制器、RAID、檔案系統、空間和目錄權限。
  3. 確認資料庫檔案路徑、檔案是否完整、日誌是否被刪除或流動。
  4. 盤點完整、差異和日誌備份,驗證可復原到哪個時間點。
唯讀檢查與驗證範例
SELECT name,state_desc,user_access_desc FROM sys.databases;
EXEC xp_readerrorlog 0,1,N"Error";
DBCC CHECKDB (N"DatabaseName") WITH NO_INFOMSGS, ALL_ERRORMSGS;

corp.example、192.0.2.0/24 與 203.0.113.0/24 均為檔案範例。只有在確認實際環境參數後,才能取代為實際值。

4. 推薦實施步驟

  1. 優先在隔離環境從備份還原並驗證,生產原檔案保持不動。
  2. 修復儲存和權限根因後再嘗試正常復原。
  3. 只有無可用備份且業務接受資料丟失時,才評估 EMERGENCY 模式和 REPAIR_ALLOW_DATA_LOSS。
  4. 修復後導出資料到新資料庫,不把經過強制修復的庫繼續當作長期生產庫。
遙距還是現場處理?日誌、設定和少量對象通常可先遙距評估;涉及物理伺服器、儲存、機房供電、批次切換或復原演練時,應安排受控現場維護時段。浙江、上海、江蘇可根據項目情況上門,其他地區可遙距協助。

5. 驗證、復原與常見誤區

  • DBCC CHECKDB 無一致性錯誤,資料庫可多次重新啟動復原。
  • 應用程式、作業、備份和關鍵資料核對透過。
  • 底層磁盤、RAID、檔案系統和事件日誌不再錯誤訊息。

常見錯誤做法

  • 直接刪除 LDF 後重新附加。
  • 在唯一原始檔案上運行允許資料丟失的修復。
  • 只把資料庫改成 ONLINE,不檢查儲存根因。

常見問題

Recovery Pending 和 Suspect 有甚麼區別?

前者通常表示復原尚未開始或資源不可用,後者表示復原失敗;都需要查看具體錯誤。

REPAIR_ALLOW_DATA_LOSS 能否直接使用?

不能作為首選。它可能刪除損壞頁或對象,只適用於沒有可用備份且接受損失的最後手段。

上一篇SQL Server 服務啟動數秒後自動停止:如何從 ERRORLOG、服務帳戶、master 與 tempdb 找出原因?下一篇Hyper-V 檢查點為何不能取代備份?虛擬機器備份與復原應如何驗收?

需要結合實際環境進一步判斷?

可提供系統版本、拓撲、完整錯誤訊息、事件日誌時間點、影響範圍、近期變更和已做過的操作。我們會先判斷風險、處理邊界和復原方式,再確認實施範圍。