資料庫快照是唯讀、靜態的資料庫檢視,建立瞬間捕獲來源資料庫的頁面影像。採用稀疏檔案技術,僅儲存建立快照後被修改的頁面(複製寫入 Copy-on-Write)。
-- 建立快照
CREATE DATABASE MyDB_Snap_20240115 ON
(NAME = MyDB_Data, FILENAME = 'D:\Data\MyDB_Snap_20240115.ss')
AS SNAPSHOT OF MyDB;
GO
-- 使用快照查詢(無鎖定、不阻塞來源)
SELECT * FROM MyDB_Snap_20240115.dbo.Orders WHERE OrderDate >= '2024-01-01';
-- 還原來源資料庫至快照時間點(來源不可有其他快照存在)
RESTORE DATABASE MyDB FROM DATABASE_SNAPSHOT = 'MyDB_Snap_20240115';
GO
-- 刪除快照
DROP DATABASE MyDB_Snap_20240115;
| 優勢 | 說明 |
|---|---|
| 零鎖定報表 | 報表查詢導向快照,來源資料庫無共享鎖,OLTP 不受影響。 |
| 秒級還原 | 誤刪資料/表格時,RESTORE FROM SNAPSHOT 秒級完成,比完整備份還原快得多。 |
| 儲存效率 | 稀疏檔案僅佔用實際變更空間,適合頻繁建立(如每小時)。 |
| 開發/測試基準 | 快速建立生產一致性環境,測試畢即刪除。 |
ALTER DATABASE ... ADD FILE 會導致所有現有快照失效。| 場景 | 建議方案 |
|---|---|
| 每日多次報表查詢,不想影響 OLTP | 建立快照,報表連線指向快照 |
| 部署腳本上線前,需快速回滾點 | 部署前建立快照,失敗時 RESTORE FROM SNAPSHOT |
| 開發人員需最新生產資料進行測試 | 建立快照,開發環境還原快照(或直接查詢快照) |
| 災難備份(機房失火、勒索軟體) | 快照無法替代異地備份,必須配合完整/記錄備份 |
資料庫快照是 SQL Server 2005+ 強大的輔助工具,以極低成本提供「時間旅行」能力。善用於報表卸載、部署保護、開發同步,但切記快照 ≠ 備份,完整備份策略不可缺席。