摘要:[SQL] 資料庫還原到任何一時間點
當你設定了資料庫的「Recovery Mode=Full」,並且定期的執行各項「Full Backup」、「Differential Backup」與「Transaction Log Backup」,那麼你是可以將此資料庫還原到任何一個時間點上的。
基本備份還原請參考前一篇「資料庫備份與還原 - Backup、Restore」
上面的圖是用來舉例可能的資料庫備份策略,底下就來說明怎麼還原到任何一個時間點上,步驟為
- 先做 Tail Log 的備份,並且設定 NORECOVERY (將該資料庫設定在 Restoring.. 模式)
- 選擇要還原的「備份集」與時間點
ㄝ~才兩步驟嗎?是~就是這麼簡單......
-------實際測試 -------------------
- 2010-12-16 15:13:39.727 建立 Table_A
- 2010-12-16 15:14:41.927 做完整備份 Full
- 2010-12-16 15:16:10.430 Insert 資料 AAA
- 2010-12-16 15:17:21.173 Insert 資料 BBB
- 2010-12-16 15:18:14.463 做差異性備份 Differential
- 2010-12-16 15:19:46.160 Insert 資料 CCC
- 2010-12-16 15:20:33.167 做交易式備份 Transaction Log
- 2010-12-16 15:21:49.780 Insert 資料 DDD
- 假設資料毀損點,或者資料被大量誤改點
- -----開始進行修復動作-------------------------------
- 進行 step 1 : Backup tail log (可以用 sp_who 察看誰在線上,並且用 Kill spid 來中斷該連線)
- BACKUP LOG [Northwind] TO DISK = N'C:\temp\Northwind.Bak' WITH NO_TRUNCATE , NOFORMAT,NOINIT, NAME = N'Northwind-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, NORECOVERY, STATS = 10
-
2010-12-16 15:27:16.210 進入 Restoring
- ---- 假設要還原到 2010-12-16 15:17:00.000 時間點
- 最後來察看 Table_A 的內容為何?
選擇還原時間點
SSMS 幫你決定該使用到哪些備份集
Northwind 很小,一下子就完成了
*** 來看看 Table_A 還原之後的內容吧!!
沒意外的,只剩下AAA這筆資料了,當然如果其他資料表有異動,也會一併回復到你所決定的時間點。
那~~~~~~~~~時間點選錯了,可不可以再來一次,我想改還原到「2010-12-16 15:20:00.000」可以不可以呢?
這種情況是判斷 Table_A 裡的資料 AAA、BBB、CCC 都是正常的,或是確定哪一個時間點是正常的
答案當然是OK的啦~下圖就把 Table_A 想要的內容還原回來了!
除了下圖的選擇外,記得記得要先做 Tail Log 的 Backup 並且設定 NORECOVERY 唷!
T-SQL 設定時間點語法 StopAT
RESTORE DATABASE [Northwind] FROM DISK = N'C:\temp\Northwind.Bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
RESTORE DATABASE [Northwind] FROM DISK = N'C:\temp\Northwind.Bak' WITH FILE = 2, NORECOVERY, NOUNLOAD, STATS = 10, RESTORE LOG [Northwind] FROM DISK = N'C:\temp\Northwind.Bak' WITH FILE = 3, NOUNLOAD, STATS =10, STOPAT = N'2010-12-16T15:20:00' |
~ End