從日誌中恢復SQL Server數據庫到時間點

==引自http://blog.csdn.net/davidullua/article/details/138999===

 

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章