程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> SqlServer2008 >> SqlServer2008誤操作數據(delete或者update)後恢復數據的方法

SqlServer2008誤操作數據(delete或者update)後恢復數據的方法

編輯:SqlServer2008

實際工作中,有時會直接在數據庫中操作數據,比如對數據進行delete或者update操作,當進行這些操作的時候,如果沒有加上 where條件或者where條件不合理,那麼導致的結果可想而知,如果操作的又是線上數據庫,那麼這個後果將會非常嚴重。

當事情發生後,我們要想辦法補救,針對於sqlserver2005數據庫,有個很出名的工具Log Exploer。具體操作使用大家可以自行搜索;針對於sqlserver2008也有這樣的工具,但是大多是需要付費的...我們嘗試用 sqlserver的事務日志來恢復這些受影響的數據。

用事務日志恢復數據,需要兩個必要條件:

1、正確的完整數據庫的最後一次備份

如果沒有數據庫完整備份,是不能做事務日志備份的,所以建議創建數據庫時,恢復模式一項,應當選擇'完整'。

2、正確的即時點

即所要恢復到數據的時間點,這個時間點一般選擇誤操作發生時間往前一點的時間點,所以當誤操作發生時,應盡量記下這個時間點,不然可能導致恢復的數據不夠准確。比如,

誤操作發生於16:00,這個時間點我們可以選擇15:59,如果選擇的太靠前,比如15:30,那麼15:30--15:59這段時間內的數據就不能被恢復了。

下面記錄具體的操作步驟:

首先新建一個數據庫dbtest,注意創建數據庫時恢復模式一項選擇'完整',在數據庫中新建一個Table_1,並插入一些數據,然後對該數據庫做一個完整備份。

這個備份,主要是模擬實際工作中對數據庫的備份,實際中由於數據庫可能很大,所以一般備份是一天或者兩天進行一次。

備份成功後,接著再往Table_1中插入幾條數據, 模擬在原數據庫基礎上新增加的數據,然後執行一個sql語句:delete from Table_1,模擬誤操作,並記錄下時間,比如16:00.誤操作發生後,我們要趕緊進行事務日志的備份,我們就是根據此備份來還原數據的。

事務日志備份完後,我們可以新建個數據庫dbtest1,然後把之前備份的數據庫在新建的數據中進行還原,之所以這麼做,是因為用事務日志 恢復數據庫需要獲得數據庫的獨占訪問權,如果在原庫上進行恢復,那麼這需要對原庫停止對外服務,但是這樣,可能會導致線上系統不能正常運行,造成非常大的 影響,所以我們新建個數據庫用作數據的還原,而不影響線上系統的正常進行。最後把新庫中還原回來的數據,再導入到原庫中。

對dbtest1進行還原時,注意"選項"的配置

數據庫還原成功後,此時dbtest1應為正在還原的狀態:,接著對數據庫進行還原:任務—>還原—>事務日志,

時間點選擇誤操作之前的一個時間點,比如15:59:59,然後確定,完成全部數據恢復操作。  

下面的一段話源自其他帖子:

1、這是一般大型網站數據安全的一個辦法,因為數據庫比較大(可能有幾百G)數據,做一次完整備份時間很長,而且影響數據庫服務器的性能, 為保證數據安全,大多采用完整備份+事務日志備份來保證數據安全。例如:一天做一次或者2天做一次完整備份,幾個小時內做一次日志備份。(當然可以用寫一 個job來實現)

2、如SQL server 2005裡的鏡像就是采用的這種事務日志同步的方法保證數據的同步。

3、如果恢復的日志數據出現”LSN“太早和太晚說明了事務日志間的不連續。這時要注意備份 的時間和順序。

參考文章:

SQL Server 2008數據庫誤刪數據如何進行數據恢復

SQL Server 2008及更高版本數據庫恢復方法之日志尾部備份

拯救你的數據 通過日志恢復MSSQL數據

以上就是本文的全部內容,希望對大家的學習有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved