摘要:SQL 2008 Snapshot 資料庫快照集 - 救援篇
前一篇「SQL 2008 Snapshot 資料庫快照集 - 原理篇」介紹 Snapshot 的動作原理,這一篇就是要故意「誤刪」資料表,然後利用 Snapshot 來作為還原資料的動作。動作順序:
- 建立 AdventureWorks 資料庫的 Snapshot 快照集
- 故意誤刪「DatabaseLog」資料表
- 利用 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 時的錯誤