有時會碰到同事誤刪或誤更新了某些數據,現在把恢復數據的方法之一:備份日志尾部,簡單記錄一下。
1. 首先檢查你要還原的數據庫的恢復模式是否為完整,如果不是改為完整恢復模式。
其次,確保該數據庫至少做過一次完整備份,因為所有其他類型的備份都是基於完整備份的,如果不確定的話可以通過下面這個語句來查看數據庫的備份情況:
select database_name,recovery_model,name,backup_finish_date from msdb.dbo.backupset where database_name='SmartDev' order by backup_finish_date desc,name
得到的結果:
2. 拿下面這個表來做例子:
select * from dbo.Office
有三條記錄,現在把數據刪掉:
delete from dbo.Office
數據清空了,現在要想辦法把數據恢復過來,我們要做一次日志尾部備份,這里要確保沒有人再連接到該數據庫上。
特別是Media Options這個選項頁中的各種選項要勾上,比如下圖這樣。
點OK執行,如果出現下面的提示,則表示此時還有別的進程連接在該數據庫上,因為備份日志尾部會使數據庫處於還原狀態,如果不斷開所有連接是執行不了的。
清除掉所有連接后再執行,備份成功后看看數據的狀態,表示正在還原中。
3. 進行還原數據庫操作。首先還原完整數據庫備份,這時要選擇最近的一次完整備份,
並在Options選項頁中,Recovery state要選擇第二項。
成功后看數據庫還是下面這個狀態,
接下來還原日志文件,在指定還原點時只要把時間指定到誤操作之前的時間就可以。
Options選項頁中,因為日志文件是最后一個還原的文件,所以Recovery state選擇第一項。
還原成功后
再查詢,表數據已經恢復。
4. 最后總結一下,我嘗試了多種情況,因為有可能存在多個完整備份,而這中間又可能有多個差異備份,得出以下幾點:
a. 在還原完整數據庫備份時,一定要選擇離誤操作時間最近的一次,如果這個備份文件找不到了,而去找次一個最近的備份是還原不成功的。
b. 如果在最近一次完整備份和誤操作時間之間還有多個差異備份的話,可以不用逐步還原這些差異備份再還原日志備份,而是在還原了最近一次完整備份后直接還原日志備份即可。
c. 如果在還原的任何一部出現錯誤還原不成功,而數據庫又處於這種不可用狀態的話,可以用下面的語句恢復。
RESTORE DATABASE SmartDev WITH RECOVERY
可能還有些情況沒嘗試過,目前先只做到這些。