恢復SQL2005誤刪除的資料

2021-08-22 16:56:16 字數 1463 閱讀 9438

由於同事寫錯作業指令碼,導致昨天晚上系統當中一張重要表的大概2萬資料被刪除。早上發現時的情況是,半夜(誤操作之後)備份過資料,昨天的備份已經被新的備份取代而且沒有日誌備份..貌似這個策略不太合理。這個結果就是,沒有誤操作之前的全庫備份,無法通過restore log 來恢復。

但是備份後沒有清除日誌,這個給恢復留了最後一絲希望。最後只能寄希望於log explorer。據我所知的是log explorer不支援sql2005,以前在2000下我還翻譯過他的英文文件,參考

11.3.5 資料還原到指定時間點的處理示例.sql

--建立測試資料庫

create database db

go--對資料庫進行備份

backup database db to disk='c:\db.bak' with format

go--建立測試表

create table db.dbo.tb_test(id int)

--延時1秒鐘,再進行後面的操作(這是由於sql server的時間精度最大為百分之三秒,不延時的話,可能會導致還原到時間點的操作失敗)

waitfor delay '00:00:01'

go--假設我們現在誤操作刪除了 db.dbo.tb_test 這個表

drop table db.dbo.tb_test

--儲存刪除表的時間

select dt=getdate() into #

go--在刪除操作後,發現不應該刪除表 db.dbo.tb_test

--下面演示了如何恢復這個誤刪除的表 db.dbo.tb_test

--首先,備份事務日誌(使用事務日誌才能還原到指定的時間點)

backup log db to disk='c:\db_log.bak' with format

go--接下來,我們要先還原完全備份(還原日誌必須在還原完全備份的基礎上進行)

restore database db from disk='c:\db.bak' with replace,norecovery

go--將事務日誌還原到刪除操作前(這裡的時間對應上面的刪除時間,並比刪除時間略早

declare @dt datetime

select @dt=dateadd(ms,-20,dt) from # --獲取比表被刪除的時間略早的時間

restore log db from disk='c:\db_log.bak' with recovery,stopat=@dt

go--查詢一下,看表是否恢復

select * from db.dbo.tb_test

/*--結果:

id

-----------

(所影響的行數為 0 行)

--*/

--測試成功

go--最後刪除我們做的測試環境

drop database db

drop table #

恢復SQL2005誤刪除的資料

由於同事寫錯作業指令碼,導致昨天晚上系統當中一張重要表的大概2萬資料被刪除。早上發現時的情況是,半夜 誤操作之後 備份過資料,昨天的備份已經被新的備份取代而且沒有日誌備份.貌似這個策略不太合理。這個結果就是,沒有誤操作之前的全庫備份,無法通過restore log 來恢復。但是備份後沒有清除日誌,這...

恢復SQL2005誤刪除的資料

由於同事寫錯作業指令碼,導致昨天晚上系統當中一張重要表的大概2萬資料被刪除。早上發現時的情況是,半夜 誤操作之後 備份過資料,昨天的備份已經被新的備份取代而且沒有日誌備份.貌似這個策略不太合理。這個結果就是,沒有誤操作之前的全庫備份,無法通過restore log 來恢復。但是備份後沒有清除日誌,這...

恢復SQL2005誤刪除的資料

由於同事寫錯作業指令碼,導致昨天晚上系統當中一張重要表的大概2萬資料被刪除。早上發現時的情況是,半夜 誤操作之後 備份過資料,昨天的備份已經被新的備份取代而且沒有日誌備份.貌似這個策略不太合理。這個結果就是,沒有誤操作之前的全庫備份,無法通過restore log 來恢復。但是備份後沒有清除日誌,這...