災難發生時,備份檔案損壞導致無法還原。定期驗證備份完整性是 DBA 的核心職責。
| 指令 | 檢查深度 | 耗時 | 適用場景 |
|---|---|---|---|
RESTORE VERIFYONLY | 預設:MTF 格式 + 可讀性 | 快 | 快速檢查、無 CHECKSUM 備份 |
RESTORE VERIFYONLY (WITH CHECKSUM) | 完整:頁面 CHECKSUM + 備份集 CHECKSUM | 中 | **標準驗證流程** |
RESTORE DATABASE ... WITH CHECKSUM | 完整 + 實際還原驗證 | 慢 | 演練/測試環境完整驗證 |
DBCC CHECKDB (還原後) | 資料庫邏輯/物理一致性 | 最慢 | 終極驗證、生產環境演練 |
預設僅檢查:
不檢查:備份資料內容是否損壞。甚至用 16 進位編輯器修改備份檔案資料區,VERIFYONLY 仍回報「備份集有效」。
BACKUP DATABASE AdventureWorks
TO DISK = 'G:\backups\AdventureWorks_full.bak'
WITH CHECKSUM, COMPRESSION, STATS = 10;
若備份檔案被竄改 (哪怕 1 byte):
Msg 3189, Level 16, State 1: Damage to the backup set was detected.
Msg 3013, Level 16, State 1: VERIFY DATABASE is terminating abnormally.
| 面向 | 影響 | 建議 |
|---|---|---|
| CPU | 計算 CHECKSUM 佔用處理器時間 | 現代 CPU 影響微乎其微,強烈建議開啟 |
| 備份時間 | 增加 5-15% (視資料類型、CPU) | 可接受,換取可靠性極划算 |
| 還原/驗證時間 | 同比例增加 | 必要成本 |
| 相容性 | SQL 2005+ 全支援 | 無遷移阻礙 |
RESTORE VERIFYONLY **不受資料庫大小限制**,可在 Express 實例上驗證 TB 級備份檔WITH CHECKSUM, COMPRESSIONRESTORE VERIFYONLY FROM DISK = '...' WITH CHECKSUMRESTORE DATABASE ... WITH CHECKSUM + DBCC CHECKDB無驗證的備份 = 沒有備份。WITH CHECKSUM 讓 RESTORE VERIFYONLY 從「格式檢查」進化為「內容完整性驗證」,成本極低、收益極高。建立「備份 → 即時驗證 → 定期演練 → 異地驗證」四層防線,才能在災難來臨時真正安心。