資料庫在誤操作下,日誌恢復

2021-08-30 09:18:11 字數 1808 閱讀 1522

在使用了updata,delete,或者其他情況讓資料庫遭到破壞時,可以使用下列方法進行恢復,前提是要有上次的備份,並且要對現在資料庫的日誌進行備份。

遇到資料庫誤操作的時候,千萬別著急,不要用上次的備份直接恢復資料庫,這樣導致日誌也被覆蓋。具體操作,看下面的例子

前提條件:mybbs是資料庫test中的乙個表,

資料庫test的recovery model為full,auto close,auto shrink兩個選項未選中。

資料庫test的data files和log files均為預設的自動增長狀態。

很多做開發的會直接在生產資料庫上select、update、delete資料,突然某天乙個不小心、腦子一迷糊,就刪除了乙個關鍵的資料表,怎麼辦?

告訴你乙個辦法,我自己用過一次 :(    幫別人恢復用過一次 ^_^

必要條件:必須有乙個誤操作之前的資料庫的完全備份,且在備份之後沒有清過資料庫日誌。如果你沒有完全備份,或者你輕信別人胡言亂語而清掉了資料庫日誌,那就沒救了。

假設誤操作的資料庫名為 yddata

1、備份誤操作後的資料庫的日誌:

backup log yddata to disk='d:\db_log.bak'

2、恢復之前做的完全備份,假設該完全備份的檔名為 d:\db_old.bak

restore database yddata_2 from disk='d:\db_old.bak' with norecovery

注意:恢復成的資料庫名為 yddata_2,不要覆蓋正在使用的庫

3、最後一步:

restore log yddata_2 from disk='d:\db_log.bak'

with stopat='2007-04-14 12:30:00'

stopat 代表要將資料庫恢復到哪一時刻的狀態

其實原理很簡單:相當於在之前的備份的基礎上將備份之後的操作重新做了一遍。

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

SQL SERVER 資料誤操作的恢復

事務日誌忠實地記錄了資料庫的活動,所以基於這些記錄的活動就可以隨心所欲地將資料庫的狀態恢復到特定的即時點或故障點。事務日誌備份只能與完整恢復和大容量日誌記錄恢復模型一起使用。在簡單模型下,事務日誌可能被破壞,所以事務日誌可能不連續,不連續的事務日誌備份沒有意義,因為基於日誌的恢復要求日誌是連續的。因...

oracle 誤操作 資料 恢復

drop 等誤操作 恢復 站內資料 show recyclebin flashback table table name to before drop 未commit誤操作 rollback 已commit delete等誤刪除資料恢復 檢視當前scn,scn 1就是上一次commit操作 sele...

記一次資料庫誤操作 資料恢復

今天運算元據庫不小心修改掉了全庫的資料。炸了。這裡有個恢復的orcal 資料的辦法 create table t table recove 新錶 asselect from t table 你操作的那張表 as of timestamp to timestamp 2010 06 02 11 36 5...