資料庫備份是災難恢復的最後防線。完整的備份策略包含完整備份、差異備份、交易記錄備份三層防護,配合正確的還原序列,能將 RPO/RTO 降至最低。
| 備份類型 | 內容 | 大小 | 速度 | 還原複雜度 | 適用場景 |
|---|---|---|---|---|---|
| 完整備份 | 整個資料庫所有資料頁 + 部分記錄 | 最大 | 最慢 | 最簡單 (單一檔案) | 基準點、小型資料庫、簡單復原模式 |
| 差異備份 | 自上次完整備份以來變更的資料頁 | 中等 | 中等 | 完整 + 最新差異 | 中大型資料庫、縮短備份窗口 |
| 交易記錄備份 | 自上次記錄備份以來的所有交易記錄 | 最小 | 最快 | 完整 + 差異 + 所有記錄 (序列) | 完整/大量記錄復原模式、RPO 近乎零 |
-- 策略:每日完整 + 每6小時差異 + 每15分鐘記錄 -- 1. 完整備份 (每日 02:00) BACKUP DATABASE [MyDB] TO DISK = 'D:\Backup\MyDB_Full_20240115.bak' WITH COMPRESSION, CHECKSUM, STATS = 10 -- 2. 差異備份 (06:00, 12:00, 18:00) BACKUP DATABASE [MyDB] TO DISK = 'D:\Backup\MyDB_Diff_20240115_0600.bak' WITH DIFFERENTIAL, COMPRESSION, CHECKSUM -- 3. 記錄備份 (每15分鐘) BACKUP LOG [MyDB] TO DISK = 'D:\Backup\MyDB_Log_20240115_0615.trn' WITH COMPRESSION, CHECKSUM
-- 1. 還原完整備份 (NORECOVERY 保持還原狀態) RESTORE DATABASE [MyDB] FROM DISK = 'D:\Backup\MyDB_Full_20240115.bak' WITH NORECOVERY, REPLACE, STATS = 10 -- 2. 還原最新差異備份 RESTORE DATABASE [MyDB] FROM DISK = 'D:\Backup\MyDB_Diff_20240115_1800.bak' WITH NORECOVERY, STATS = 10 -- 3. 依序還原所有記錄備份 RESTORE LOG [MyDB] FROM DISK = 'D:\Backup\MyDB_Log_20240115_1815.trn' WITH NORECOVERY -- ... 依序套用至最後一份記錄備份 ... -- 4. 完成還原 (RECOVERY 上線) RESTORE DATABASE [MyDB] WITH RECOVERY
RESTORE LOG [MyDB] FROM DISK = 'D:\Backup\MyDB_Log_20240115_1815.trn' WITH NORECOVERY, STOPAT = '2024-01-15 18:10:00' -- 後續記錄備份不再套用,直接 RECOVERY
RESTORE DATABASE [MyDB] PAGE = '1:123, 1:456' -- file_id:page_id FROM DISK = 'D:\Backup\MyDB_Full_20240115.bak' WITH NORECOVERY -- 再套用差異 + 記錄備份至最新
備份指令寫入多個檔案,還原時需同時指定所有檔案:
RESTORE DATABASE [MyDB] FROM DISK = 'D:\Backup\MyDB_1.bak', DISK = 'D:\Backup\MyDB_2.bak' WITH REPLACE