Sqlserver2008誤操作數據(delete或者update)後恢複數據(轉) 實際工作中,有時會直接在資料庫中操作數據,比如對數據進行delete或者update操作,當進行這些操作的時候,如果沒有加上 where條件或者where條件不合理,那麼導致的結果可想而知,如果操作的又是線上資料庫 ...
Sqlserver2008誤操作數據(delete或者update)後恢複數據(轉)
實際工作中,有時會直接在資料庫中操作數據,比如對數據進行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“太早和太晚說明瞭事務日誌間的不連續。這時要註意備份 的時間和順序。
參考:
dudu:實戰 SQL Server 2008 資料庫誤刪除數據的恢復
SQLServer 2008以上誤操作資料庫恢復方法——日誌尾部備份