日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

误删表数据,如何恢复过来

發(fā)布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 误删表数据,如何恢复过来 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

  • /*?
  • ????真實案例:在執(zhí)行語句的時候錯誤的把系統(tǒng)中的一個表的數(shù)據(jù)全部刪除?
  • ????在刪除之前,我做過一次完整的數(shù)據(jù)庫備份,再刪除之后,我第一時?
  • ????間做了尾日志備份?
  • ????也就是說??我手上現(xiàn)在有一份最新的完整備份??和刪除數(shù)據(jù)之后的尾?
  • ????日志備份?
  • */?
  • -->>TravyLee生成測試數(shù)據(jù):?
  • USE?MASTER?
  • GO?
  • IF?OBJECT_ID('TestDb')?IS?NOT?NULL?
  • DROP?DATABASE?TestDb?
  • GO?
  • CREATE?DATABASE?TestDb;?
  • GO?
  • --設(shè)置數(shù)據(jù)庫為完整恢復(fù)模式?
  • ALTER?DATABASE?TestDb?SET?RECOVERY?FULL?WITH?NO_WAIT?
  • GO?
  • ?
  • --查看系統(tǒng)表中TestDb數(shù)據(jù)庫的恢復(fù)級別?
  • SELECT??
  • ????recovery_model,?
  • ????recovery_model_desc???
  • FROM??
  • ????sys.databases???
  • WHERE??
  • ????name?='TestDb'???
  • /*?
  • recovery_model??recovery_model_desc?
  • -------------------------------------------?
  • 1???FULL?
  • */?
  • ?
  • --接下來使用TestDb數(shù)據(jù)庫來測試?
  • ?
  • 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年入學(xué),目前在四川成都實習(xí)'?union?all?
  • select?'200911077','test02','男','2009年入學(xué),目前在上海實習(xí)'?union?all?
  • select?'200911078','test03','女','2009年入學(xué),留校考研'?union?all?
  • select?'200911079','test04','男','2009年入學(xué),目前在四川成都實習(xí)'?union?all?
  • select?'200911080','test05','女','2009年入學(xué),留校考研'?union?all?
  • select?'200911081','test06','男','2009年入學(xué),目前在廣東深圳實習(xí)'?
  • GO?
  • ?
  • --現(xiàn)在我對數(shù)據(jù)庫做一次完整的備份:?
  • BACKUP?DATABASE?[TestDb]??
  • TO??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH?NOFORMAT,?NOINIT,???
  • NAME?=?N'TestDb-完整?數(shù)據(jù)庫?備份',?SKIP,?NOREWIND,?NOUNLOAD,??STATS?=?10?
  • GO?
  • ?
  • ?
  • --現(xiàn)在我查看表里的數(shù)據(jù)???都存在?
  • SELECT?*?FROM?StuInfo?
  • /*?
  • Id??StuId???StuName?StuSex??Others?
  • ---------------------------------------------------------------------------------?
  • 1???200911076???test01??男???2009年入學(xué),目前在四川成都實習(xí)?
  • 2???200911077???test02??男???2009年入學(xué),目前在上海實習(xí)?
  • 3???200911078???test03??女???2009年入學(xué),留校考研?
  • 4???200911079???test04??男???2009年入學(xué),目前在四川成都實習(xí)?
  • 5???200911080???test05??女???2009年入學(xué),留校考研?
  • 6???200911081???test06??男???2009年入學(xué),目前在廣東深圳實習(xí)?
  • */?
  • ?
  • --現(xiàn)在我來對數(shù)據(jù)進(jìn)行一些插入操作:?
  • insert?StuInfo(StuId,StuName,StuSex,Others)?
  • select?'200911082','test07','男','2009年入學(xué),目前在四川成都實習(xí)'?union?all?
  • select?'200911083','test08','女','2009年入學(xué),目前在上海實習(xí)'?
  • select?getdate()--2013-01-11?09:10:07.500?
  • ?
  • ?
  • --此時表StuInfo里面有8條數(shù)據(jù)??我原本想刪除掉id為3,5的數(shù)據(jù)?但我錯誤的把表里的數(shù)據(jù)?
  • --全部刪除了?
  • --錯誤的執(zhí)行了以下命令?
  • delete?from?StuInfo?
  • select?getdate()--2013-01-11?09:11:15.207?
  • ?
  • --再次查看數(shù)據(jù):?
  • select?*?from?StuInfo?
  • --無結(jié)果:?
  • /*?
  • 此時我發(fā)現(xiàn)自己犯的這個錯誤,為了彌補(bǔ),?
  • 我需要把數(shù)據(jù)恢復(fù)到剛剛插入數(shù)據(jù)之后的?
  • 這個時間點,于是我做了一下操作?
  • */?
  • ?
  • --這時由于我誤刪數(shù)據(jù),我需要將數(shù)據(jù)恢復(fù)到我插入數(shù)據(jù)之前的狀態(tài)?
  • --也就是2013-01-11?09:11:15.207這個時間點之前?
  • --在誤刪數(shù)據(jù)之前,我做過一次完整的數(shù)據(jù)庫備份?
  • ?
  • ?
  • --這個時候我首先要冷靜下來,對事務(wù)日志進(jìn)行一次備份:?
  • USE?[master]??
  • BACKUP?LOG?[TestDb]??
  • TO??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??NO_TRUNCATE?,?NOFORMAT,?NOINIT,???
  • NAME?=?N'TestDb-事務(wù)日志??備份',?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'驗證失敗。找不到數(shù)據(jù)庫“TestDb”的備份信息。',?16,?1)??
  • end?
  • RESTORE?VERIFYONLY?FROM??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??FILE?=?@backupSetId,??NOUNLOAD,??NOREWIND?
  • GO?
  • ?
  • ?
  • ?
  • --現(xiàn)在我們來還原數(shù)據(jù)庫,由于我錯誤的刪除了數(shù)據(jù)????
  • ?
  • ?
  • --首先我根據(jù)完整備份進(jìn)行一次還原,也就是說把數(shù)據(jù)庫還原到?
  • RESTORE?DATABASE?[TestDb]??
  • FROM??DISK?=?N'E:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak'?WITH??FILE?=?1,???
  • NORECOVERY,??NOUNLOAD,??STATS?=?10?
  • GO?
  • ?
  • --接下來根據(jù)日志備份來恢復(fù)數(shù)據(jù)庫:?
  • ?
  • 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'--這個時間是我在誤刪數(shù)據(jù)之前的時間?
  • GO?
  • ?
  • --接下來我們來驗證數(shù)據(jù)是否恢復(fù):?
  • use?[TestDb]?
  • go?
  • select?*?from?StuInfo?
  • /*?
  • Id??StuId???StuName?StuSex??Others?
  • -------------------------------------------------------------------------------------------------------------?
  • 1???200911076???test01??男???2009年入學(xué),目前在四川成都實習(xí)?
  • 2???200911077???test02??男???2009年入學(xué),目前在上海實習(xí)?
  • 3???200911078???test03??女???2009年入學(xué),留校考研?
  • 4???200911079???test04??男???2009年入學(xué),目前在四川成都實習(xí)?
  • 5???200911080???test05??女???2009年入學(xué),留校考研?
  • 6???200911081???test06??男???2009年入學(xué),目前在廣東深圳實習(xí)?
  • 7???200911082???test07??男???2009年入學(xué),目前在四川成都實習(xí)?
  • 8???200911083???test08??女???2009年入學(xué),目前在上海實習(xí)?
  • */?
  • ?
  • ?
  • 總結(jié):?
  • 為了能夠在錯誤操作或者災(zāi)難發(fā)生后使數(shù)據(jù)盡快恢復(fù),數(shù)據(jù)庫就必須要滿足一下前提:?
  • ?
  • 1,數(shù)據(jù)庫的恢復(fù)模式必須是完整恢復(fù)模式?
  • 2,災(zāi)難發(fā)生前或者錯誤刪除數(shù)據(jù)之前必須做過一個完整數(shù)據(jù)庫備份?
  • 3,在上次數(shù)據(jù)庫完整備份之后,如果做過任何日志備份,這些備份現(xiàn)在都能找到?
  • ?
  • 滿足這些要求后,數(shù)據(jù)庫就可以恢復(fù)到任何一個時間點了。?
  • ?
  • 恢復(fù)的具體步驟:?
  • ?
  • 1,災(zāi)難發(fā)生后備份活動事務(wù)日志(也稱尾日志)?
  • 2,還原最新完整數(shù)據(jù)庫備份,而不做事務(wù)恢復(fù)(WITH?NORECOVERY)?
  • 3,如果存在差異備份????則還原差異備份,而不做事務(wù)恢復(fù)(WITH?NORECOVERY)?
  • 4,從備份后創(chuàng)建的第一個事務(wù)日志開始,使用NORECOVERY一次還原事務(wù)日志?
  • 5,恢復(fù)數(shù)據(jù)庫到某個時間點(WITH??STOPAT?=?N'某個時間點')?
  • ?

    轉(zhuǎn)載于:https://blog.51cto.com/812792011/1117966

    總結(jié)

    以上是生活随笔為你收集整理的误删表数据,如何恢复过来的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。