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

SQL Server 2000 資料庫檔案損壞恢復實戰:備份鏈完整還原流程

     編輯:關於SqlServer

故障場景

  • 使用者資料庫 (非 master/msdb) 遭遇實體檔案損壞 (如磁碟壞軌、誤修改 MDF 位元組)。
  • 資料庫啟動後狀態為「可疑」。
  • 具備最近一次完整備份與後續交易日誌備份。

恢復前置條件

  1. 資料庫復原模式為 完整 或 大量記錄。
  2. 擁有損壞前的 完整備份 (`.bak`)。
  3. 擁有完整備份後至故障點的 所有交易日誌備份** 且鏈條未斷。

分步恢復操作 (isql / sqlcmd / SSMS)

步驟 1:尾端日誌備份 (關鍵!)

在還原前,嘗試備份目前作用中日誌 (包含未寫入資料檔的交易):

BACKUP LOG Test TO DISK = 'D:\Backup\Test_TailLog.bak' WITH NO_TRUNCATE;
  • `NO_TRUNCATE`:即使資料庫損壞/可疑,仍嘗試讀取日誌檔案備份。
  • 若成功,此備份包含故障前最後的交易,可將資料損失降至最低 (RPO ≈ 0)。
  • 若失敗 (日誌檔同樣損壞),則依賴現有日誌備份鏈,RPO = 最後一次日誌備份時間點。

步驟 2:還原完整備份 (NORECOVERY)

RESTORE DATABASE Test FROM DISK = 'D:\Backup\Test_Full.bak' WITH NORECOVERY, REPLACE;
  • `NORECOVERY`:保持資料庫處於恢復中狀態,等待後續日誌還原。
  • `REPLACE`:允許覆蓋現有損壞資料庫檔案。

步驟 3:依序還原差異備份 (若有,同 NORECOVERY)

RESTORE DATABASE Test FROM DISK = 'D:\Backup\Test_Diff.bak' WITH NORECOVERY;

步驟 4:依序還原所有交易日誌備份

-- 除最後一個外,皆用 NORECOVERY
RESTORE LOG Test FROM DISK = 'D:\Backup\Test_Log1.bak' WITH NORECOVERY;
RESTORE LOG Test FROM DISK = 'D:\Backup\Test_Log2.bak' WITH NORECOVERY;
-- 最後一個 (含尾端日誌備份) 用 RECOVERY 完成
RESTORE LOG Test FROM DISK = 'D:\Backup\Test_TailLog.bak' WITH RECOVERY;

步驟 5:驗證

DBCC CHECKDB('Test') WITH NO_INFOMSGS;
SELECT * FROM Test..CriticalTable; -- 業務關鍵表抽查

關鍵風險與對策

風險影響對策
日誌備份鏈中斷無法還原至故障點,資料遺失 = 斷點至故障間的交易監控備份作業失敗告警;定期 `RESTORE VERIFYONLY` 驗證備份可用性
尾端日誌備份失敗RPO 退化為最後一次成功日誌備份鏡像/AlwaysOn 同步複寫提供次級複本日誌備份能力
還原過程中斷電/錯誤資料庫處於恢復中狀態重新執行 `RESTORE DATABASE ... WITH RECOVERY` 完成恢復

現代版本 (SQL 2005+) 增強功能

  • 頁面級還原: `RESTORE DATABASE ... PAGE = '1:100, 1:101' ...` 僅還原損壞頁面,線上完成,無需整庫離線。
  • 檔案群組還原: 僅還原受損檔案群組,其他群組保持線上。
  • 時間點還原 UI: SSMS「還原資料庫」→「時間軸」視覺化選擇還原點。

預防勝於治療:備份策略檢查清單

  1. 完整備份:每日 1 次,離站/異地複製。
  2. 差異備份:每 4-6 小時 (視資料變更率)。
  3. 交易日誌備份:每 15-60 分鐘 (視 RPO 需求)。
  4. 備份驗證:`RESTORE VERIFYONLY` / `CHECKSUM` 選項 / 定期演練還原。
  5. 備份加密:`WITH ENCRYPTION` (SQL 2014+) 防止備份檔外洩。
  6. 備份壓縮:`WITH COMPRESSION` (SQL 2008+) 節省儲存與傳輸頻寬。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved