SQL Server快照功能以及其查詢操作
文章主要描述的是SQL Server快照以及其查詢的實際操作步驟的描述,近日再次講到關(guān)于SQL Server 2005數(shù)據(jù)庫的快照功能。在這篇文章里我們主要是對其做一個總結(jié),近日再次講到SQL Server 2005中的數(shù)據(jù)庫快照功能。
使用場景:
只讀的報表查詢(可以有多個版本)
分擔(dān)源數(shù)據(jù)庫壓力
將數(shù)據(jù)靜止在某個時間
對于人為失誤問題的災(zāi)難恢復(fù)
主要限制:
要求企業(yè)版
SQL Server 2005快照與源數(shù)據(jù)庫必須在一個服務(wù)器實例
如果存在多個快照的話,就不可以使用其中某一個進(jìn)行還原了
實驗步驟:
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ù)庫快照查詢的依賴關(guān)系
我們都知道數(shù)據(jù)庫快照這個功能最主要的一個特性就是所謂的"寫入時復(fù)制",也就是說快照數(shù)據(jù)庫最開始的時候并沒有包含數(shù)據(jù), 只有在源數(shù)據(jù)庫的數(shù)據(jù)頁發(fā)生變化的情況下,才會發(fā)生數(shù)據(jù)復(fù)制.
但是不管數(shù)據(jù)有沒有從源數(shù)據(jù)庫復(fù)制到快照數(shù)據(jù)庫,查詢SQL Server 2005快照數(shù)據(jù)庫都要求源數(shù)據(jù)庫是在線的
為了做這個測試,此時,如果設(shè)置源數(shù)據(jù)庫的狀態(tài)為脫機,則就無法完成查詢
- ALTER DATABASE [Northwind] SET OFFLINE
上述的相關(guān)內(nèi)容就是對SQL Server 2005快照的描述,希望會給你帶來一些幫助在此方面。
延伸閱讀
數(shù)據(jù)庫快照是怎樣工作的
可以使用典型的數(shù)據(jù)庫命令CREATE DATABASE語句來生成一個數(shù)據(jù)庫快照,在聲明中有一個源數(shù)據(jù)庫快照的附加說明。當(dāng)快照被建立時,同時生成一個稀疏文件。這個文件(只能使用在NTFS卷中)在初始化的時候并沒有磁盤空間分配給它——盡管你可能在WINDOWS資源管理器中看到了文件的大小,它會看上去與原始的源數(shù)據(jù)庫文件的大小相同。對磁盤來說其實這個文件的大小接近于零。
數(shù)據(jù)庫快照在初始化時讀的數(shù)據(jù)文件是來自于源數(shù)據(jù)庫的。當(dāng)源數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)引擎就會將原始數(shù)據(jù)從源數(shù)據(jù)庫拷貝到快照數(shù)據(jù)庫中。這個技術(shù)確保快照數(shù)據(jù)庫只反映快照被執(zhí)行時數(shù)據(jù)的狀態(tài)。當(dāng)SELECT命令被用來發(fā)布反對數(shù)據(jù)庫快照時,不管數(shù)據(jù)頁的讀取是否被定位在源數(shù)據(jù)庫數(shù)據(jù)文件中還是在快照數(shù)據(jù)庫數(shù)據(jù)文件中都是沒有鎖被發(fā)布的。因為在只讀數(shù)據(jù)庫快照中是沒有鎖被發(fā)布,數(shù)據(jù)庫快照對于報表解決方案是一個重要的解決方案。
【編輯推薦】