SQL Server 誤刪資料庫的資料怎麼辦
今天同事忘了下where條件
不小心誤更新了四千多筆的資料表
一時間協助查詢解決方法,畢竟不是dba
操作實務不足,也不敢馬上給指令
深怕把資料庫搞壞,連現行資料都弄不回來
事後,經過比較各個blog,MSDN,還有跟同事的討論後,實證驗正過以下做法可行,足以做為SOP
也同時花了點時間理解原理
發現原來我認知的誤區就是我以為資料庫靠transaction log就可以rollback回去過去時間點(減法)
但其實關鍵點反而是用加法在還原時間點加回來交易紀錄,見上圖所示,我寫在黑板記錄一下
看參考部落格時還想說為啥要先restore 資料..後來才想通
因此語法真的誤刪(人人似乎都有這個黑歷史)的話,別緊張,Follow以下SOP,應該可以救的回來,前提是資料庫是在完整模式下
範例資料:
原本的資料
不小心誤刪了或漏下了where條件
這個時候,不要緊張,先找到上一次完整備份的時間點
以我的範例是8:55分
Step 0.網站停機或下線 (注意,千萬不能第一時間又做了一次完整備份)
避免寫入更多資料,複原時會遺失更多資料
Step1.切換單人模式並重新離線上線(確保資料庫是無人連線)
Step 1.進行完整的交易記錄備份 (ex.9:00分當下)
這時,你的DB應該會是在還原模式下:
Step2.還原上一次的資料備份檔案(記得要比欲複原的時間點更早,ex:AM 08:55那一版本的Bak)
注意:還原計畫只能包含資料,不能勾選到剛剛的交易記錄
還原完整備份的bak時,復原狀態要選擇Restore With No Recovery
Step3.還原交易記錄,並指定還原時間點(ex:8:56分)
還原成功後,再進行將資料庫切回多人模式
檢查資料,已經回復了,可喜可賀
想法有誤的話,歡迎大家回饋指教
參考blog:
https://kknews.cc/zh-tw/code/q4lj5x8.html
https://blog.miniasp.com/post/2010/04/21/SQL-Server-Full-Differential-Transaction-Backup