企業級高可用 (AlwaysOn/叢集) 成本高昂。對於 RTO/RPO 要求在小時級、可接受人工切換的中小型系統,本文介紹基於 xcopy 檔案複製與 SQL Agent 自動還原的低成本 Standby 熱備方案。
生產端:完整備份 (每日 04:00) + 交易記錄備份 (每 20 分鐘) → 共享資料夾
待命端:xcopy 定時拉取備份檔 → SQL Agent 作業執行 RESTORE WITH STANDBY → 保持唯讀恢復狀態
優勢:無需昂貴共享存儲、無網域控制器依賴、配置簡單透明。
劣勢:故障切換需人工介入 (修改 IP/DNS/連線字串)、可能丟失最後一段記錄備份資料。
\\prod-server\sqlbackup\db_test\建立 SQL Agent 作業,每 20 分鐘執行 (錯開備份時間):
-- 步驟 1: xcopy 拉取最新備份檔
EXEC xp_cmdshell 'xcopy "\\prod-server\sqlbackup\db_test\*.bak" "D:\StandbyBackup\" /D /Y /R'; -- /D 只複製更新檔
-- 步驟 2: 識別最新完整備份與後續記錄備份 (邏輯略,建議用 PowerShell 腳本生成動態 RESTORE 指令)
-- 步驟 3: 執行 STANDBY 還原
RESTORE DATABASE db_test
FROM DISK = 'D:\StandbyBackup\db_test_full_20240101_0400.bak'
WITH STANDBY = 'D:\StandbyBackup\db_test_standby.ldf', -- 回復點檔案
NORECOVERY, -- 後續記錄備份用 NORECOVERY
STATS = 10,
MOVE 'db_test' TO 'D:\Data\db_test.mdf',
MOVE 'db_test_log' TO 'D:\Log\db_test.ldf';
-- 後續記錄備份迴圈
RESTORE LOG db_test
FROM DISK = 'D:\StandbyBackup\db_test_log_20240101_0420.trn'
WITH STANDBY = 'D:\StandbyBackup\db_test_standby.ldf', NORECOVERY;
RESTORE DATABASE db_test WITH RECOVERY;| 指標 | 目標值 | 本方案達成 |
|---|---|---|
| RTO (恢復時間目標) | 1 小時 | ✓ 人工切換約 15-30 分鐘 |
| RPO (恢復點目標) | 30 分鐘 | ✓ 記錄備份每 20 分鐘,最多丟 20 分鐘 |
| 硬體成本 | 最低 | ✓ 僅需一台待命伺服器 |
xcopy 升級為 robocopy /MIR /R:2 /W:5 增強斷點續傳與錯誤重試。RESTORE 指令,消除手工維護還原鏈負擔。WITH COMPRESSION) 減少網路傳輸時間與儲存空間 (SQL 2008+ Enterprise/Standard)。