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