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



















 
 
 



 
 
 
 