生活随笔
收集整理的這篇文章主要介紹了
误删表数据,如何恢复过来
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
/*?????真實案例:在執行語句的時候錯誤的把系統中的一個表的數據全部刪除?????在刪除之前,我做過一次完整的數據庫備份,再刪除之后,我第一時?????間做了尾日志備份?????也就是說??我手上現在有一份最新的完整備份??和刪除數據之后的尾?????日志備份?*/??USE?MASTER?GO?IF?OBJECT_ID('TestDb')?IS?NOT?NULL?DROP?DATABASE?TestDb?GO?CREATE?DATABASE?TestDb;?GO??ALTER?DATABASE?TestDb?SET?RECOVERY?FULL?WITH?NO_WAIT?GO???SELECT??????recovery_model,?????recovery_model_desc???FROM??????sys.databases???WHERE??????name?='TestDb'???/*?recovery_model??recovery_model_desc??1???FULL?*/????USE?TestDb?GO?IF?OBJECT_ID('StuInfo')?IS?NOT?NULL?DROP?TABLE?StuInfo?CREATE?TABLE?StuInfo?(?????Id?int?identity(1,1),?????StuId?varchar(25),?????StuName?nvarchar(25),?????StuSex?varchar(25),?????Others?nvarchar(255)?)?GO?insert?StuInfo(StuId,StuName,StuSex,Others)?select?'200911076','test01','男','2009年入學,目前在四川成都實習'?union?all?select?'200911077','test02','男','2009年入學,目前在上海實習'?union?all?select?'200911078','test03','女','2009年入學,留校考研'?union?all?select?'200911079','test04','男','2009年入學,目前在四川成都實習'?union?all?select?'200911080','test05','女','2009年入學,留校考研'?union?all?select?'200911081','test06','男','2009年入學,目前在廣東深圳實習'?GO???BACKUP?DATABASE?[TestDb]??TO??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH?NOFORMAT,?NOINIT,???NAME?=?N'TestDb-完整?數據庫?備份',?SKIP,?NOREWIND,?NOUNLOAD,??STATS?=?10?GO????SELECT?*?FROM?StuInfo?/*?Id??StuId???StuName?StuSex??Others??1???200911076???test01??男???2009年入學,目前在四川成都實習?2???200911077???test02??男???2009年入學,目前在上海實習?3???200911078???test03??女???2009年入學,留校考研?4???200911079???test04??男???2009年入學,目前在四川成都實習?5???200911080???test05??女???2009年入學,留校考研?6???200911081???test06??男???2009年入學,目前在廣東深圳實習?*/???insert?StuInfo(StuId,StuName,StuSex,Others)?select?'200911082','test07','男','2009年入學,目前在四川成都實習'?union?all?select?'200911083','test08','女','2009年入學,目前在上海實習'?select?getdate()??????delete?from?StuInfo?select?getdate()???select?*?from?StuInfo??/*?此時我發現自己犯的這個錯誤,為了彌補,?我需要把數據恢復到剛剛插入數據之后的?這個時間點,于是我做了一下操作?*/????????USE?[master]??BACKUP?LOG?[TestDb]??TO??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??NO_TRUNCATE?,?NOFORMAT,?NOINIT,???NAME?=?N'TestDb-事務日志??備份',?SKIP,?NOREWIND,?NOUNLOAD,??NORECOVERY?,???STATS?=?10,?CHECKSUM?GO?declare?@backupSetId?as?int?select?@backupSetId?=?position??from?msdb..backupset??where?database_name=N'TestDb'??and?backup_set_id=(select?max(backup_set_id)??from?msdb..backupset?where?database_name=N'TestDb'?)?if?@backupSetId?is?null??begin??raiserror(N'驗證失敗。找不到數據庫“TestDb”的備份信息。',?16,?1)??end?RESTORE?VERIFYONLY?FROM??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??FILE?=?@backupSetId,??NOUNLOAD,??NOREWIND?GO????????RESTORE?DATABASE?[TestDb]??FROM??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??FILE?=?1,???NORECOVERY,??NOUNLOAD,??STATS?=?10?GO????RESTORE?LOG?[TestDb]?FROM??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??FILE?=?2,??NOUNLOAD,???STATS?=?10,??STOPAT?=?N'2013-01-11T09:10:08'?GO???use?[TestDb]?go?select?*?from?StuInfo?/*?Id??StuId???StuName?StuSex??Others??1???200911076???test01??男???2009年入學,目前在四川成都實習?2???200911077???test02??男???2009年入學,目前在上海實習?3???200911078???test03??女???2009年入學,留校考研?4???200911079???test04??男???2009年入學,目前在四川成都實習?5???200911080???test05??女???2009年入學,留校考研?6???200911081???test06??男???2009年入學,目前在廣東深圳實習?7???200911082???test07??男???2009年入學,目前在四川成都實習?8???200911083???test08??女???2009年入學,目前在上海實習?*/???總結:?為了能夠在錯誤操作或者災難發生后使數據盡快恢復,數據庫就必須要滿足一下前提:??1,數據庫的恢復模式必須是完整恢復模式?2,災難發生前或者錯誤刪除數據之前必須做過一個完整數據庫備份?3,在上次數據庫完整備份之后,如果做過任何日志備份,這些備份現在都能找到??滿足這些要求后,數據庫就可以恢復到任何一個時間點了。??恢復的具體步驟:??1,災難發生后備份活動事務日志(也稱尾日志)?2,還原最新完整數據庫備份,而不做事務恢復(WITH?NORECOVERY)?3,如果存在差異備份????則還原差異備份,而不做事務恢復(WITH?NORECOVERY)?4,從備份后創建的第一個事務日志開始,使用NORECOVERY一次還原事務日志?5,恢復數據庫到某個時間點(WITH??STOPAT?=?N'某個時間點')? ?
轉載于:https://blog.51cto.com/812792011/1117966
總結
以上是生活随笔為你收集整理的误删表数据,如何恢复过来的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。