SQL 2008 Snapshot 資料庫快照集 - 救援篇

摘要:SQL 2008 Snapshot 資料庫快照集 - 救援篇

 前一篇SQL 2008 Snapshot 資料庫快照集 - 原理篇介紹 Snapshot 的動作原理,這一篇就是要故意「誤刪」資料表,然後利用 Snapshot 來作為還原資料的動作。

動作順序:

 

  1. 建立 AdventureWorks 資料庫的 Snapshot 快照集
  2. 故意誤刪「DatabaseLog」資料表
  3. 利用 Snapshot DB 還原資料
-----------------
Step 1:建立 AdventureWorks 資料庫的 Snapshot 快照集

MSDN 說道:「使用 Transact-SQL 是建立資料庫快照集的唯一方式。能夠建立資料庫的任何使用者都可以建立資料庫快照集,不過若要建立鏡像資料庫的快照集,您必須是 sysadmin固定伺服器角色的成員。
 
所以乖乖下 T-SQL 來建立 Snapshot 吧!要SSMS有提供可能要等 SQL 2012 :P
範例:

CREATE DATABASE AdventureWorks_snapshot ON ( NAME =
AdventureWorks_Data, FILENAME ='C:\temp\AdventureWorks_data.ss' 
AS
SNAPSHOT OF AdventureWorks;
GO

說明:

 

CREATE DATABASE 建立Snapshot的名稱 ON ( NAME 
原DB的MDF名稱, FILENAME ='建立Snapshot的檔案路徑及名稱' 
AS
SNAPSHOT OF 針對哪的DB做Snapshot;
GO

原DB的MDF名稱請參考下圖紅方框

 


 

執行後,在SSMS就可以看到 AdventureWorks_snapshot ,再點開裡頭可以看到完整的資料(請參考原理篇


Step 2:故意誤刪「DatabaseLog」資料表
刪除資料表可以在SSMS針對 Table 按 Delete ,當然也可以下 T-SQL 去刪除他囉
 刪除 Table

DatabaseLog 不見了


觀看 Snapshot 的 DatabaseLog 資料表還在


Step 3:利用 Snapshot DB 還原資料
輕輕鬆鬆用 Snapshot DB 來還原這個 DatabaseLog Table 吧
一行指令搞定。

select * into DatabaseLog from AdventureWorks_snapshot.dbo.DatabaseLog

說明:

 

select * into 目標資料表 from 資料庫名稱.擁有者Owner.來源資料庫

 

救回了 1566 個資料列
 
爽快救回被「誤刪」的資料表。
 
~ End
 
後記:Snapshot 是採用 copy-on-write 的方式寫入,對於資料異動的時候,當然對 Performance 多多少少有點影響,如果同時存在多份的 Snapshot,就會有多份的連帶資料需要被寫入。
 
需不需要與值不值得,就看大家對自己的資料想採取何種保護策略。
 
----------------------
Snapshot 可能會導致 Restore DataBase 時的錯誤