SQL Server Snapshot

Jujay發表於2011-09-28
Snapshot是SQL Server 2005引入的一個新特性,只有在Enterprise版本中有這個功能。

建立Snapshot:

建立Snapshot的語句和建立Database的語句類似,只是在末尾多了AS SNAPSHOT OF。(注意:暫時還不支援用Sql Server Management Studio以圖形化的方式建立Snapshot)
CREATE DATABASE RMS_V3_SQA_snapshot_20110928 ON
( NAME = N'RMS_V3',
FILENAME = N'H:\INTEL_DB_DUMPS\JABDW1239\DONT_TOUCH\RMS_V3_SQA_snapshot_20110928.snap' )
AS SNAPSHOT OF RMS_V3_SQA;
注意:其中的NAME必須和源資料庫的logical name匹配。

Snapshot的工作原理:

Snapshot是一個只讀的、靜態的資料庫檢視,當Snapshot建立時,SQL Server會做以下幾個方面:
1. 建立一個稀疏檔案(sparse file),該檔案在Windows上顯示的大小(Size)和源資料檔案一樣,但是實際佔用大小(Size on disk)卻很小,幾乎為空。
2. 源資料庫觸發Checkpoint(即把所有的髒資料從記憶體寫入到磁碟);
3. 對於為提交的事務,在Snapshot端將會回滾;
一旦Snapshot建立之後,copy-on-write機制便開始起作用了:當源資料庫的某個page發生改變時,在它改變之前,先把該page複製到Snapshot的稀疏檔案。當一個查詢語句到達Snapshot時,SQL Server會先判斷查詢的page是否被修改過,如果已經被修改過,SQL Server訪問Snapshot的稀疏檔案,如果未被修改過,SQL Server訪問源資料庫的page。

這樣做的好處是使得建立Snapshot非常快,佔用的空間也很小;缺點是太依賴於源資料庫,且對源資料庫的效能有一些影響(當源資料庫發生改變時,需要維護Snapshot)

Snapshot的主要用途:

1.防止使用者誤操作: 在做複雜操作之前,先建立一個snapshot,萬一出現問題,可以用以下語句從snapshot中恢復源資料庫:
RESTORE DATABASE RMS_V3_SQA
from DATABASE_SNAPSHOT = 'RMS_V3_SQA_snapshot_20110928'
2.儲存歷史資料

Snapshot的限制:

1.Snapshot必須得和源資料庫在同一個例項中;
2.不能備份、恢復、attach,detach Snapshot
3.對master,model,tempdb資料庫不能建立Snapshot;
4.一旦Snapshot建立之後,源資料庫不能被刪除、恢復。

參考文獻: http://www.simple-talk.com/sql/database-administration/sql-server-2005-snapshots/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-708463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章