[SQL] 資料庫還原到任何一時間點

摘要:[SQL] 資料庫還原到任何一時間點

 

 當你設定了資料庫的「Recovery Mode=Full」,並且定期的執行各項「Full Backup」、「Differential Backup」與「Transaction Log Backup」,那麼你是可以將此資料庫還原到任何一個時間點上的。

基本備份還原請參考前一篇「資料庫備份與還原 - Backup、Restore

上面的圖是用來舉例可能的資料庫備份策略,底下就來說明怎麼還原到任何一個時間點上,步驟為

 

  1. 先做 Tail Log 的備份,並且設定 NORECOVERY (將該資料庫設定在 Restoring.. 模式)
  2. 選擇要還原的「備份集」與時間點
ㄝ~才兩步驟嗎?是~就是這麼簡單......
-------實際測試 -------------------

 

 

  • 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
GO

RESTORE DATABASE [Northwind] FROM  DISK = N'C:\temp\Northwind.Bak' WITH  FILE = 2,  NORECOVERY, NOUNLOAD,  STATS = 10,  
STOPAT = N'2010-12-16T15:20:00'
GO

RESTORE LOG [Northwind] FROM  DISK = N'C:\temp\Northwind.Bak' WITH  FILE = 3,  NOUNLOAD,  STATS =10,  STOPAT = N'2010-12-16T15:20:00'

 

~ End