技術文章 / SQL Server、ERP 與老舊系統

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

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

先說結論

Recovery Pending 和 Suspect 說明資料庫無法完成復原。應先保護檔案和記錄,檢查 I/O、空間、權限與錯誤號,再決定還原或修復。 現場判斷時,先核對「SQL ERRORLOG 錯誤號」和「數據/日誌檔案可訪問性」是否與正常路徑一致,再決定是否需要繼續處理「磁盤空間與 I/O」。

先把故障邊界縮小

這類伺服器與資料庫問題先從「SQL ERRORLOG 錯誤號」和「數據/日誌檔案可訪問性」劃定故障邊界,再繼續核對「磁盤空間與 I/O」。先保存目前狀態、時間點和一組正常對照,證據明確後再決定是否需要修改正式環境設定。

建議按這條依賴鏈定位

檢查點為甚麼要看建議動作
01 · SQL ERRORLOG 錯誤號從SQL ERRORLOG 錯誤號獲取直接證據,並與應用連接、服務賬戶、磁盤和網絡依賴交叉驗證,避免在數據庫故障時先做破壞性修改。把「SQL ERRORLOG 錯誤號」的結果與正常對象、日誌時間線和實際業務路徑對照,先確認它是原因還是伴隨現象,再進入變更。
02 · 數據/日誌檔案可訪問性從數據/日誌檔案可訪問性獲取直接證據,並與應用連接、服務賬戶、磁盤和網絡依賴交叉驗證,避免在數據庫故障時先做破壞性修改。先以只讀方式確認「數據/日誌檔案可訪問性」並保存結果;若與基線不一致,再結合故障時間和最近變更判斷是否需要處理。
03 · 磁盤空間與 I/O核對磁盤空間與 I/O的現狀、日誌和最近變更,並與問題發生時間對齊;先只讀確認,再決定是否需要變更。記錄「磁盤空間與 I/O」的目前值、證據來源和檢查時間;需要調整時只改一個條件,並保留原設定作切回。
04 · 服務賬號權限核對服務賬號權限的有效結果,而不是只看某一處配置;同時檢查繼承、緩存、組成員和賬號生命週期帶來的疊加影響。記錄「服務賬號權限」的目前值、證據來源和檢查時間;需要調整時只改一個條件,並保留原設定作切回。
05 · 備份可用性圍繞備份可用性保留可驗證證據,至少確認恢復點、恢復路徑、依賴和實際恢復結果,而不是只以任務成功狀態作為結論。記錄「備份可用性」的目前值、證據來源和檢查時間;需要調整時只改一個條件,並保留原設定作切回。
06 · 避免直接執行破壞性修復核對避免直接執行破壞性修復的現狀、日誌和最近變更,並與問題發生時間對齊;先只讀確認,再決定是否需要變更。把「避免直接執行破壞性修復」的結果與正常對象、日誌時間線和實際業務路徑對照,先確認它是原因還是伴隨現象,再進入變更。
只讀檢查示例
SELECT name, state_desc FROM sys.databases;

確認根因後再做變更

  1. 先做只讀檢查,記錄時間點、受影響對象和第一處異常;優先驗證“SQL ERRORLOG 錯誤號”與“數據/日誌檔案可訪問性”。
  2. 如果基礎連通或配置正常,再把檢查推進到“磁盤空間與 I/O”“服務賬號權限”,並保留日誌、事件或命中記錄作為證據。
  3. 確認「磁盤空間與 I/O」與「服務賬號權限」的證據能夠解釋現象後再改設定;涉及「備份可用性」時,先保存原值並寫清切回觸發條件。
  4. 先在受控對象上完成「避免直接執行破壞性修復」相關驗證,再擴大到真實使用者或業務流量;觀察期內同時複查日誌和異常存取。

修復後怎樣算真正恢復

  • 從用戶或業務入口完成端到端驗證,不只驗證“SQL ERRORLOG 錯誤號”單點狀態。
  • 復查“備份可用性”與“避免直接執行破壞性修復”是否達到預期,並確認沒有引入新的繞行或權限擴大。
  • 歸檔「SQL ERRORLOG 錯誤號」至「避免直接執行破壞性修復」的關鍵證據、變更前後設定、業務測試和切回點,後續復發時可直接對照。

容易被誤判的地方

  • 在沒有可靠備份和錯誤號證據時先執行修復、收縮或重建等高風險操作。
  • 端口測試成功就把問題全部歸因到應用,而沒有繼續檢查 TLS、賬號、數據庫狀態和連接字符串。
  • 一次改多個參數,最後即使恢復也無法知道真正根因。

常見延伸問題

SQL Server 資料庫顯示 Recovery Pending 或 Suspect:如何安全復原而不擴大資料損毀時,第一步應該查甚麼?

先確認影響範圍,並從“SQL ERRORLOG 錯誤號”和“數據/日誌檔案可訪問性”開始做只讀驗證;第一目標是找到最早出現異常的層,而不是立即改配置。

為甚麼單個端口或單個測試成功,業務仍然可能失敗?

因為完整業務通常還依賴認證、名稱解析、後端服務、權限或回程路徑。需要繼續驗證“磁盤空間與 I/O”與“服務賬號權限”等上層依賴。

修復後怎樣確認問題不會很快再次出現?

復測業務操作後,再檢查「備份可用性」和「避免直接執行破壞性修復」對應的日誌與狀態,並保留變更記錄、觀察結果和切回點。

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

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