SQL利用資料庫日誌恢復資料到時間點的操作 -- 轉自網路

ningzi82發表於2010-10-19
SQL利用資料庫日誌恢復資料到時間點的操作
2009-08-18 08:45

1,如果誤操作之前存在一個全庫備份(或已有多個差異備份或增量備份),首先要做的事就是進進行一次日誌備份(如果為了不讓日誌檔案變大而置trunc. log on chkpt.選項為1那你就死翹了)
backup log dbName to disk='fileName'

也可以在誤操作之後先進行全庫備份,然後進行日誌備份。例如:

backup database click to disk='d:clickdb.bak' ---資料庫備份

backup log click to disk='d:clicklog.dbf' ----日誌備份

這裡要注意庫備份和日誌備份的先後順序,顛倒順序會出錯:

伺服器: 訊息 4326,級別 16,狀態 1,行 1
此備份集中的日誌終止於 LSN 27000000033600001,該 LSN 太早,無法應用到資料庫。包

LSN27000000033800001 的較新的日誌備份可以還原。

2,恢復一個全庫備份,注意需要使用with norecovery,如果還有其他差異或增量備份,則逐個恢復
restore database dbName from disk='fileName' with norecovery

[@more@]

例如:

restore database click from disk=''d:clickdb.bak' with norecovery

3,恢復最後一個日誌備份即剛做的日誌備份,指定恢復時間點到誤操作之前的時刻
restore log dbName from disk='fileName' with stopat='date_time'

例如:

restore log click from disk='d:clicklog.dbf' width recovery,stopat='2007-06-27 12:15:50'

現在已經將日誌前滾到合適的時間點,並使資料庫可供使用。請注意,STOPAT在資料庫正在執行大容量日誌時禁止執行

另外注意:執行時可能會提示

1恢復模式不對,當前模式為簡單,要用alter database修改恢復模式的錯誤(第3步錯誤提示)

解決辦法

企業管理器---&gt當前資料庫右鍵---&gt屬性---&gt選項---&gt故障還原裡的模型選非簡單模式

2伺服器: 訊息 3101,級別 16,狀態 1,行 1
因為資料庫正在使用,所以未能獲得對資料庫的排它訪問權(第2步錯誤提示)

解決辦法:
因為當前的資料庫正在使用,所以先連線到Master 資料庫,斷開要恢復的資料庫的所有連線(無法段開的就用kill),然後在Master 中再執行restore database click及第3restore log click

例項:

1.進行一次完整備份

backup database test to disk='d:test.bak'

2.刪除test2表中的內容 時間是 2008-05-12 15:53:50
delete from test..test2

3.備份操作後的事務日誌
backup log test to disk='d:testlog.trn'

4.恢復開始的完整備份
restore database test from disk='d:test.bak' with norecovery

5.恢復刪除操作後的事務日誌,時間指定到刪除前的某個時間 2008-05-12 15:53:45
restore log test from disk='d:testlog.trn' with recovery,stopat='2008-05-12 15:53:45'

6.檢視test2表中的內容,和刪除前完全一樣

轉自網路:http://hi.baidu.com/wferp/blog/item/a5775013c2ff3c0b5aaf5331.html

http://hi.baidu.com/anydb/blog/item/5e1ac6ed512df8e4cf1b3e60.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/789833/viewspace-1039965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章