資料庫快照核心概念
- 唯讀靜態檢視:建立瞬間的資料庫完整映射,後續來源資料異動不影響快照內容。
- 稀疏檔案機制:僅儲存建立快照後被修改的原始資料頁,初始大小近乎為零,隨來源資料異動成長。
- 無鎖讀取:報表查詢快照時不發出任何鎖定,完全不干擾來源資料庫的線上交易處理。
- 快速還原:可將來源資料庫還原至快照建立時的狀態,適用於誤操作回復。
建立快照語法
CREATE DATABASE SnapshotDatabase
ON (
NAME = 'SourceDatabase_Data',
FILENAME = 'C:\SQLServer\SnapshotDatabase.ss'
) AS SNAPSHOT OF SourceDatabase;
注意:
1. 必須指定來源資料庫的邏輯檔案名稱。
2. 快照檔案需置於 NTFS 磁碟區。
3. 不建立記錄檔,因快照唯讀無交易記錄需求。
運作流程示意
- 建立快照 → 產生稀疏檔案,磁碟實際大小 ≈ 0。
- 來源資料庫執行 UPDATE/DELETE → 修改前的資料頁複製至稀疏檔案。
- 查詢快照 → 若資料頁未修改,直接讀取來源資料檔;已修改則讀取稀疏檔案。全程無鎖。
報表應用優勢
- 報表伺服器直接連線快照,零封鎖、零干擾生產交易。
- 可依報表需求建立多個不同時點快照(如日報、月結快照)。
- 搭配報表伺服器快照訂閱功能,實現自動化報表交付。
災難復原應用
-- 將來源資料庫還原至快照狀態 (需來源資料庫無其他快照存在)
RESTORE DATABASE SourceDatabase FROM DATABASE_SNAPSHOT = 'SnapshotDatabase';
適用場景:誤刪資料表、誤更新大量資料、測試環境快速重置。
風險與限制
- 磁碟空間壓力:高頻寫入環境下稀疏檔案快速增長,可能填滿磁碟。
- 效能影響:寫入操作需額外複製頁面至稀疏檔案,增加 I/O 開銷。
- 版本限制:僅 Enterprise/Developer 版支援;Standard 版不可用。
- 不可備份:快照無法直接備份,需透過來源資料庫備份間接保護。
最佳實務建議
- 評估寫入頻率與可用磁碟空間,設定快照保留期限與自動清除排程。
- 將快照檔案置於獨立磁碟陣列,避免與來源資料檔案爭奪 I/O。
- 監控
sys.dm_io_virtual_file_stats 追蹤稀疏檔案成長趨勢。
- 結合資料庫鏡像/可用性群組,構建多層次高可用與報表分流架構。