從日志中恢復SQL Server數據庫到時間點
2024-08-31 00:48:08
供稿:網友
 
菜鳥學堂: 
author:david euler
date: 2004/10/16
email:[email protected] 
有任何問題,請與我聯系:)
         db2中可以使得數據庫回復到指定的時間點,sql server數據庫的recovery model為full 或者bulk copy的時候,是可以從日志來恢復數據庫的。實際上日志中記錄的一條一條的transact sql語句,恢復數據庫的時候會redo這些sql語句。
  
前提條件:mybbs是數據庫test中的一個表,
          數據庫test的recovery model為full,auto close,auto shrink兩個選項未選中。
          數據庫test的data files和log files均為默認的自動增長狀態。
a:2004/10/13,16:00進行數據庫備份,backup database test to disk='d:/db/1600.bak' with init
b:2004/10/14,13:00對數據庫進行了update,delete等操作;
c:2004/10/15,18:00使用delete mybbs where id>300時,語句誤寫成delete mybbs,因而刪除了表mybbs中的所有數據。
 
現在在c點,c點對數據庫進行了誤操作,我們希望數據庫能夠恢復到c之前的狀態,比如恢復到10月15日17:59分的狀態。
要恢復數據庫b點,使用的是a點備分的數據庫1600.bak;而使用的日志備分是最新的備分1820.logs;因而進行如下操作:
 
--備分日志:
backup log test to disk='d:/1820.logs' with init
 
--恢復數據庫1600.bak,使用with norecovery參數:
restore database test from disk='d:/db/1640.bak' with norecovery
 
--使用日志恢復數據庫到10月15日17:59分:
restore log test
        from disk='d:/1820.logs' with recovery,stopat='10/15/2004 17:59'
 
上面的三條transact sql語句的對應過程:
      1.恢復數據庫到a點;
      2.執行a-b之間的log記錄,把數據庫恢復到b點.
 
 
       這樣就恢復數據庫到了指定的時間點。如果恢復不成功,可能的原因是:1.未使用正確的備分數據庫;2.數據庫選項選中了auto shrink.