數據庫:SQLServer快照功能以及其查詢操作
只讀的報表查詢(可以有多個版本)
分擔源數據庫壓力
將數據靜止在某個時間
對于人為失誤問題的災難恢復
主要限制:
要求企業版
SQL Server 2005快照與源數據庫必須在一個服務器實例
如果存在多個快照的話,就不可以使用其中某一個進行還原了
實驗步驟:
1. 創建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. 查詢數據庫快照
SELECT * FROM Northwind_20090725..Customers
3. 理解數據庫快照查詢的依賴關系
我們都知道數據庫快照這個功能最主要的一個特性就是所謂的”寫入時復制”,也就是說快照數據庫最開始的時候并沒有包含數據, 只有在源數據庫的數據頁發生變化的情況下,才會發生數據復制.
但是不管數據有沒有從源數據庫復制到快照數據庫,查詢SQL Server 2005快照數據庫都要求源數據庫是在線的。
為了做這個測試,此時,如果設置源數據庫的狀態為脫機,則就無法完成查詢
ALTER DATABASE [Northwind] SET OFFLINE
數據庫快照是怎樣工作的
可以使用典型的數據庫命令CREATE DATABASE語句來生成一個數據庫快照,在聲明中有一個源數據庫快照的附加說明。當快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源數據庫文件的大小相同。對磁盤來說其實這個文件的大小接近于零。
數據庫快照在初始化時讀的數據文件是來自于源數據庫的。當源數據庫的數據發生變化時,數據引擎就會將原始數據從源數據庫拷貝到快照數據庫中。這個技術確保快照數據庫只反映快照被執行時數據的狀態。當SELECT命令被用來發布反對數據庫快照時,不管數據頁的讀取是否被定位在源數據庫數據文件中還是在快照數據庫數據文件中都是沒有鎖被發布的。因為在只讀數據庫快照中是沒有鎖被發布,數據庫快照對于報表解決方案是一個重要的解決方案。