SQL Server 資料庫快照 snapShot

這是2005企業版才有的功能
會保留該資料庫在該時間點的樣子
速度非常快,3秒就好
只可唯讀,也只能在ntfs的磁碟上
原始資料庫與快照的資料庫
必須在同個個體,也就是不能跨Server
照出來的磁碟大小會與原資料庫相同


為什麼這麼快呢?
其實原理很簡單,當發生快照時
只把原資料庫的架構照出,是個空殼

當原資料庫發生update,delete (沒有insert)
系統使用copy on write的技術
會立即將異動資料存入快照資料庫
且標計該資料已照過了
若該資料爾後有任何異動與快照無關

快照能救回的資料,但不能完全替代備份
有個大前題是:原始資料庫必需還活著!

使用上的情況應該會發生在:
當要進行某些資料有可能會消失或大量輸出入時
先照一下,以測安全。
--查詢目前資料庫情況-----------
EXEC sp_helpdb 中文北風 

--建立資料庫快照---------------
CREATE DATABASE 北風快照
ON
(
 NAME = '中文北風',FILENAME='C:\北風快照\北風快照.mdf'
) 
AS SNAPSHOT OF 中文北風

--查驗一下
SELECT * FROM 中文北風.DBO.客戶
SELECT * FROM 北風快照.DBO.客戶

--做些修改
UPDATE 中文北風.DBO.客戶 SET 連絡人='陳小妹' WHERE 客戶編號='ALFKI'
UPDATE 中文北風.DBO.客戶 SET 郵遞區號='111111'
DROP TABLE 中文北風.DBO.新供應商

--救回郵遞區號的問題
UPDATE A 
SET  A.郵遞區號 = B.郵遞區號
FROM 中文北風.DBO.客戶 AS A JOIN 北風快照.DBO.客戶 AS B
 ON A.客戶編號 = B.客戶編號

--再幹掉一些資料
DROP TABLE 中文北風.DBO.供應商
DROP TABLE 中文北風.DBO.訂貨明細
DROP TABLE 中文北風.DBO.貨運公司
DELETE FROM 中文北風.DBO.產品資料

--開始進行回復,先幹掉多餘的連線
EXEC sp_who
KILL 52

--從SNAPSHOT回復資料庫
RESTORE DATABASE 中文北風
FROM DATABASE_SNAPSHOT = '北風快照'


留言

熱門文章