使用場景:
只讀的報表查詢(可以有多個版本)
分擔源數(shù)據(jù)庫壓力
將數(shù)據(jù)靜止在某個時間
對于人為失誤問題的災難恢復
主要限制:
要求企業(yè)版
SQL Server 2005快照與源數(shù)據(jù)庫必須在一個服務器實例
如果存在多個快照的話,就不可以使用其中某一個進行還原了
實驗步驟:
1. 創(chuàng)建SQL Server 2005快照
– Create Snapshot Template
USE master
GO
– Drop snapshot database if it already exists
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N’Northwind_20090725′
)
DROP DATABASE Northwind_NorthwindTest
GO
– Create the snapshot database
CREATE DATABASE Northwind_20090725 ON
( NAME = Northwind, FILENAME =
‘E:\Temp\Northwind_20090725.ss’ )
AS SNAPSHOT OF Northwind;
GO
2. 查詢數(shù)據(jù)庫快照
SELECT * FROM Northwind_20090725..Customers
3. 理解數(shù)據(jù)庫快照查詢的依賴關系
我們都知道數(shù)據(jù)庫快照這個功能最主要的一個特性就是所謂的”寫入時復制”,也就是說快照數(shù)據(jù)庫最開始的時候并沒有包含數(shù)據(jù), 只有在源數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生變化的情況下,才會發(fā)生數(shù)據(jù)復制.
但是不管數(shù)據(jù)有沒有從源數(shù)據(jù)庫復制到快照數(shù)據(jù)庫,查詢SQL Server 2005快照數(shù)據(jù)庫都要求源數(shù)據(jù)庫是在線的。
為了做這個測試,此時,如果設置源數(shù)據(jù)庫的狀態(tài)為脫機,則就無法完成查詢
ALTER DATABASE [Northwind] SET OFFLINE
數(shù)據(jù)庫快照是怎樣工作的
可以使用典型的數(shù)據(jù)庫命令CREATE DATABASE語句來生成一個數(shù)據(jù)庫快照,在聲明中有一個源數(shù)據(jù)庫快照的附加說明。當快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源數(shù)據(jù)庫文件的大小相同。對磁盤來說其實這個文件的大小接近于零。
數(shù)據(jù)庫快照在初始化時讀的數(shù)據(jù)文件是來自于源數(shù)據(jù)庫的。當源數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)引擎就會將原始數(shù)據(jù)從源數(shù)據(jù)庫拷貝到快照數(shù)據(jù)庫中。這個技術確?煺諗(shù)據(jù)庫只反映快照被執(zhí)行時數(shù)據(jù)的狀態(tài)。當SELECT命令被用來發(fā)布反對數(shù)據(jù)庫快照時,不管數(shù)據(jù)頁的讀取是否被定位在源數(shù)據(jù)庫數(shù)據(jù)文件中還是在快照數(shù)據(jù)庫數(shù)據(jù)文件中都是沒有鎖被發(fā)布的。因為在只讀數(shù)據(jù)庫快照中是沒有鎖被發(fā)布,數(shù)據(jù)庫快照對于報表解決方案是一個重要的解決方案。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |