天天看點

恢複SQL Server被誤删除的資料(再擴充)

大家對本人之前的文章《恢複SQL Server被誤删除的資料》 反應非常熱烈,但是文章裡的存儲過程不能實作對備份出來的日志備份裡所删資料的恢複

這個是一個缺陷,本人決定對這個存儲過程擴充一下,支援對log backup檔案裡的delete語句進行恢複

實驗步驟

1、首先先準備好測試表和測試語句

2、删除資料之後對資料庫進行日志備份

4、建立存儲過程

恢複SQL Server被誤删除的資料(再擴充)
恢複SQL Server被誤删除的資料(再擴充)

View Code

5、在C槽看到備份出來的日志備份檔案

恢複SQL Server被誤删除的資料(再擴充)

6、存儲過程的兩種調用方式

可以看到被誤删的那條資料.

恢複SQL Server被誤删除的資料(再擴充)

為什麽要擴充這個存儲過程

恢複SQL Server被誤删除的資料(再擴充)

因為進行了日志備份之後,原先的delete語句的log record可能已經不存在于ldf檔案裡面,這時候要恢複被那條delete語句删除的資料就需要讀取

log backup檔案裡面的log record來進行恢複

對比圖

Recover_Deleted_Data_Proc

恢複SQL Server被誤删除的資料(再擴充)

Recover_Deleted_Data_BylogBackup_Proc

恢複SQL Server被誤删除的資料(再擴充)

因為很多公司為了資料安全,一般會對資料庫半個小時或者15分鐘做一次日志備份,目的是做日志傳送或者及時把資料庫備份拷走

考慮到這種情況,本人決定擴充一下這個存儲過程,其實原理也很簡單,就是把fn_dblog函數替換為fn_dump_dblog函數

在文章《恢複SQL Server被誤删除的資料》釋出之後,有很多人通過QQ咨詢我,為什麽執行了你的存儲過程之後會顯示

There is no data in the log as per the search criteria

我發現原因基本上有兩個:

(1)資料庫從來沒有做過完整備份

(2)因為資料庫執行個體下有一個job定時對資料庫做日志備份,誤删除了資料之後(誤執行delete語句之後),剛好那個job到達運作時間,對資料庫進行了日志備份

對于第一種情況,可以參考本人寫的這篇文章《您真的了解了SQLSERVER的日志鍊了嗎?》,文章裡面有解釋

對于第二種情況,可以使用本篇文章的方法,回想一下delete語句的執行時間,然後指定日志備份的備份檔案進行恢複

恢複SQL Server被誤删除的資料(再擴充)

如有不對的地方,歡迎大家拍磚o(∩_∩)o 

本文版權歸作者所有,未經作者同意不得轉載。

繼續閱讀