SQL Server 2008高可用性系列:數據庫快照
一: 簡介
數據庫快照是數據庫(源數據庫)的只讀、靜態視圖。多個快照可以位于一個源數據庫中,并且可以作為數據庫始終駐留在同一服務器實例上。創建快照時,每個數據庫快照在事務上與源數據庫一致。在被數據庫所有者顯式刪除之前,快照始終存在。
快照可用于報表。另外,如果源數據庫出現用戶錯誤,還可將源數據庫恢復到創建快照時的狀態。丟失的數據僅限于創建快照后數據庫更新的數據。
運行原理: 數據庫快照在數據頁級運行。在第一次修改源數據庫頁之前,先將原始頁從源數據庫復制到快照。此過程稱為“寫入時復制操作”。快照將存儲原始頁,保留它們在創建快照時的數據記錄。對已修改頁中的記錄進行后續更新不會影響快照的內容。對要進行第一次修改的每一頁重復此過程。這樣,快照將保留自創建快照后經修改的所有數據記錄的原始頁。
注:只有 SQL Server 2005 Enterprise Edition 和更高版本才提供數據庫快照功能,所有恢復模式都支持數據庫快照。
二:數據庫快照的典型用法及工作方式
1. 數據庫快照的典型用法:
維護歷史數據以生成報表。
使用為了實現可用性目標而維護的鏡像數據庫來減輕報表負載。
使數據免受管理失誤所帶來的影響。
在進行重大更新(例如,大容量更新或架構更改)之前,可創建數據庫快照以保護數據。一旦進行了錯誤操作,可以使用快照將數據庫恢復到生成快照時的狀態。
使數據免受用戶失誤所帶來的影響。
管理測試數據庫
提示:數據庫快照與源數據庫相關。因此,使用數據庫快照還原數據庫不能代替備份和還原策略。嚴格按計劃執行備份仍然至關重要。如果必須將源數據庫還原到創建數據庫快照的時間點,請實施允許您執行該操作的備份策略。
2. 數據庫快照的工作方式
了解快照中的稀疏文件:為了存儲復制的原始頁,快照使用一個或多個“稀疏文件”。最初,稀疏文件實質上是空文件,不包含用戶數據并且未被分配存儲用戶數據的磁盤空間。隨著源數據庫中更新的頁越來越多,文件的大小也不斷增長。創建快照時,稀疏文件占用的磁盤空間很少。然而,由于數據庫隨著時間的推移不斷更新,稀疏文件會增長為一個很大的文件。
快照的工作方式:
(1) 寫操作
第一次寫入時會把原始頁頁復制到快照。
(2) 讀操作
無更新頁之前的讀過程
有更新頁之后的讀過程,可以看到快照讀取的是創建快照時的那一頁。
(3) 較多的讀寫之后
隨著源數據庫中更新的頁越來越多,拷貝到快照中的頁頁越來越多,文件的大小也不斷增長。
快照保存的是數據更新之前的那份拷貝,所以通過快照讀取的數據是數據更新之前的那一份,數據丟失就可以恢復到創建快照的這個時間點。
三:應用實例
1. 快照的命名
創建數據庫快照之前,考慮如何命名它們是非常重要的。每個數據庫快照都需要一個唯一的數據庫名稱。為了便于管理,數據庫快照的名稱可以包含標識數據庫的信息,例如:
源數據庫的名稱。
該新名稱用于快照的指示信息。
快照的創建日期和時間、序列號或一些其他的信息(例如一天中的某個時間)以區分給定的數據庫上的連續快照。
如:
以6個小時為間隔(06:00-18:00之間)創建快照:
AdventureWorks2008_snapshot_0600
AdventureWorks2008_snapshot_1200
AdventureWorks2008_snapshot_1800
或者不太精確的命名:
AdventureWorks2008_snapshot_morning
AdventureWorks2008_snapshot_noon
AdventureWorks2008_snapshot_evening
2. 創建數據庫快照
語法示例:
- CREATE DATABASE AdventureWorks2008_dbss1800 ON
- ( NAME = AdventureWorks2008_Data, FILENAME = ‘D:\DATA\AdventureWorks2008_data_1800.ss' )
- AS SNAPSHOT OF AdventureWorks2008;
- .Snapshot Name: AdventureWorks2008_dbss1800
- .NAME: source database data file name
- .FILENAME: snapshot sparse file name
3. 刪掉數據庫快照
- DROP DATABASE AdventureWorks2008_dbss1800
四:數據庫快照的限制
1. 對源數據庫的限制
不能對數據庫進行刪除、分離或還原。
源數據庫的性能受到影響。由于每次更新頁時都會對快照執行“寫入時復制”操作,導致源數據庫上的 I/O 增加。
不能從源數據庫或任何快照中刪除文件。
源數據庫必須處于聯機狀態,除非該數據庫在數據庫鏡像會話中是鏡像數據庫。
不能將源數據庫配置為可縮放共享數據庫。
若要在鏡像數據庫中創建數據庫快照,數據庫必須處于同步鏡像狀態。
2. 數據庫快照的限制
數據庫快照必須與源數據庫在相同的服務器實例上創建和保留。
始終對整個數據庫拍攝數據庫快照。
數據庫快照與源數據庫相關。因此,使用數據庫快照還原數據庫不能代替備份和還原策略。嚴格按計劃執行備份仍然至關重要。如果必須將源數據庫還原到創建數據庫快照的時間點,請實施允許您執行該操作的備份策略。
當將源數據庫中更新的頁強制壓入快照時,如果快照用盡磁盤空間或者遇到其他錯誤,則該快照將成為可疑快照并且必須將其刪除。
快照為只讀。
禁止對 model 數據庫、master 數據庫和 tempdb 數據庫創建快照。
不能從數據庫快照中刪除文件。
不能備份或還原數據庫快照。
不能附加或分離數據庫快照。
注:更多的限制請參照MSDN。
四:總結
數據庫快照只是提供數據恢復的一種方式,在遇到災難發生時, 數據可以恢復到創建快照的那個時間點。恢復操作可以恢復最近出現的嚴重用戶錯誤,如刪除表等。不能代替完整的備份還原策略。
原文標題:SQL Server 2008高可用性(High Availability)簡介(2)—Database Snapshots
鏈接:http://www.cnblogs.com/changbluesky/archive/2010/09/08/1821318.html
【編輯推薦】
- SQL Server 2000刪除實戰演習
- SQL Server存儲過程的命名標準如何進行?
- 卸載SQL Server 2005組件的正確順序
- 對SQL Server字符串數據類型的具體描述
- SQL Server數據類型的種類與應用
【責任編輯:彭凡 TEL:(010)68476606】