一 簡介
數據庫快照是數據庫(源數據庫)的只讀靜態視圖多個快照可以位於一個源數據庫中並且可以作為數據庫始終駐留在同一服務器實例上創建快照時每個數據庫快照在事務上與源數據庫一致在被數據庫所有者顯式刪除之前快照始終存在
快照可用於報表另外如果源數據庫出現用戶錯誤還可將源數據庫恢復到創建快照時的狀態丟失的數據僅限於創建快照後數據庫更新的數據
運行原理: 數據庫快照在數據頁級運行在第一次修改源數據庫頁之前先將原始頁從源數據庫復制到快照此過程稱為“寫入時復制操作”快照將存儲原始頁保留它們在創建快照時的數據記錄對已修改頁中的記錄進行後續更新不會影響快照的內容對要進行第一次修改的每一頁重復此過程這樣快照將保留自創建快照後經修改的所有數據記錄的原始頁
注只有 SQL Server Enterprise Edition 和更高版本才提供數據庫快照功能所有恢復模式都支持數據庫快照
二數據庫快照的典型用法及工作方式
數據庫快照的典型用法:
維護歷史數據以生成報表
使用為了實現可用性目標而維護的鏡像數據庫來減輕報表負載
使數據免受管理失誤所帶來的影響
在進行重大更新(例如大容量更新或架構更改)之前可創建數據庫快照以保護數據一旦進行了錯誤操作可以使用快照將數據庫恢復到生成快照時的狀態
使數據免受用戶失誤所帶來的影響
管理測試數據庫
提示:數據庫快照與源數據庫相關因此使用數據庫快照還原數據庫不能代替備份和還原策略嚴格按計劃執行備份仍然至關重要如果必須將源數據庫還原到創建數據庫快照的時間點請實施允許您執行該操作的備份策略
數據庫快照的工作方式
了解快照中的稀疏文件為了存儲復制的原始頁快照使用一個或多個“稀疏文件” 最初稀疏文件實質上是空文件不包含用戶數據並且未被分配存儲用戶數據的磁盤空間隨著源數據庫中更新的頁越來越多文件的大小也不斷增長創建快照時稀疏文件占用的磁盤空間很少然而由於數據庫隨著時間的推移不斷更新稀疏文件會增長為一個很大的文件
快照的工作方式
() 寫操作
第一次寫入時會把原始頁頁復制到快照
() 讀操作
無更新頁之前的讀過程
有更新頁之後的讀過程可以看到快照讀取的是創建快照時的那一頁
() 較多的讀寫之後
隨著源數據庫中更新的頁越來越多拷貝到快照中的頁頁越來越多文件的大小也不斷增長
快照保存的是數據更新之前的那份拷貝所以通過快照讀取的數據是數據更新之前的那一份數據丟失就可以恢復到創建快照的這個時間點
三應用實例
快照的命名
創建數據庫快照之前考慮如何命名它們是非常重要的每個數據庫快照都需要一個唯一的數據庫名稱為了便於管理數據庫快照的名稱可以包含標識數據庫的信息例如
源數據庫的名稱
該新名稱用於快照的指示信息
快照的創建日期和時間序列號或一些其他的信息(例如一天中的某個時間)以區分給定的數據庫上的連續快照
如
以個小時為間隔(之間)創建快照
AdventureWorks_snapshot_
AdventureWorks_snapshot_
AdventureWorks_snapshot_
或者不太精確的命名
AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening
創建數據庫快照
語法示例
CREATE DATABASE AdventureWorks_dbss ON ( NAME = AdventureWorks_Data FILENAME = ‘D:DATAAdventureWorks_data_ss )
AS SNAPSHOT OF AdventureWorks;
Snapshot Name: AdventureWorks_dbss
NAME: source database data file name
FILENAME: snapshot sparse file name
刪掉數據庫快照
DROP DATABASE AdventureWorks_dbss
四數據庫快照的限制
對源數據庫的限制
不能對數據庫進行刪除分離或還原
源數據庫的性能受到影響由於每次更新頁時都會對快照執行“寫入時復制”操作導致源數據庫上的 I/O 增加
不能從源數據庫或任何快照中刪除文件
源數據庫必須處於聯機狀態除非該數據庫在數據庫鏡像會話中是鏡像數據庫
不能將源數據庫配置為可縮放共享數據庫
若要在鏡像數據庫中創建數據庫快照數據庫必須處於同步鏡像狀態
數據庫快照的限制
數據庫快照必須與源數據庫在相同的服務器實例上創建和保留
始終對整個數據庫拍攝數據庫快照
數據庫快照與源數據庫相關因此使用數據庫快照還原數據庫不能代替備份和還原策略嚴格按計劃執行備份仍然至關重要如果必須將源數據庫還原到創建數據庫快照的時間點請實施允許您執行該操作的備份策略
當將源數據庫中更新的頁強制壓入快照時如果快照用盡磁盤空間或者遇到其他錯誤則該快照將成為可疑快照並且必須將其刪除
快照為只讀
禁止對 model 數據庫master 數據庫和 tempdb 數據庫創建快照
不能從數據庫快照中刪除文件
不能備份或還原數據庫快照
不能附加或分離數據庫快照
注更多的限制請參照MSDN
四:總結
數據庫快照只是提供數據恢復的一種方式在遇到災難發生時 數據可以恢復到創建快照的那個時間點恢復操作可以恢復最近出現的嚴重用戶錯誤如刪除表等不能代替完整的備份還原策略
From:http://tw.wingwit.com/Article/program/SQL/201405/30842.html