有時會碰到同事誤刪或誤更新了某些數據,現在把恢複數據的方法之一:備份日誌尾部,簡單記錄一下。 1. 首先檢查你要還原的資料庫的恢復模式是否為完整,如果不是改為完整恢復模式。 其次,確保該資料庫至少做過一次完整備份,因為所有其他類型的備份都是基於完整備份的,如果不確定的話可以通過下麵這個語句來查看數據 ...
有時會碰到同事誤刪或誤更新了某些數據,現在把恢複數據的方法之一:備份日誌尾部,簡單記錄一下。
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
可能還有些情況沒嘗試過,目前先只做到這些。