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

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

概述  /*      真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除      在删除之前,我做过一次完整的数据库备份,再删除之后,我第一时      间做了尾日志备份      也就是说  我手上现在有一份最新的完整备份  和删除数据之后的尾      日志备份  */  -->>TravyL

 

  /*         真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除         在删除之前,我做过一次完整的数据库备份,再删除之后,我第一时         间做了尾日志备份         也就是说  我手上现在有一份最新的完整备份  和删除数据之后的尾         日志备份     */     -->>TravyLee生成测试数据:     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          --查看系统表中TestDb数据库的恢复级别     SELECT          recovery_model,         recovery_model_desc       FROM          sys.databases       WHERE          name ='TestDb'       /*     recovery_model  recovery_model_desc     -------------------------------------------     1   FulL     */          --接下来使用TestDb数据库来测试          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',目前在上海实习' union all     select '200911078','test03','女',留校考研' union all     select '200911079','test04',目前在四川成都实习' union all     select '200911080','test05',留校考研' union all     select '200911081','test06',目前在广东深圳实习'     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,Others)     select '200911082','test07',目前在四川成都实习' union all     select '200911083','test08',目前在上海实习'     select getdate()--2013-01-11 09:10:07.500               --此时表StuInfo里面有8条数据  我原本想删除掉ID为3,5的数据 但我错误的把表里的数据     --全部删除了     --错误的执行了以下命令     delete from StuInfo     select getdate()--2013-01-11 09:11:15.207          --再次查看数据:     select * from StuInfo     --无结果:     /*     此时我发现自己犯的这个错误,为了弥补,     我需要把数据恢复到刚刚插入数据之后的     这个时间点,于是我做了一下 *** 作     */          --这时由于我误删数据,我需要将数据恢复到我插入数据之前的状态     --也就是2013-01-11 09:11:15.207这个时间点之前     --在误删数据之前,我做过一次完整的数据库备份               --这个时候我首先要冷静下来,对事务日志进行一次备份:     USE [master]      BACKUP LOG [TestDb]      TO  disK = N'E:\MSsql2008\MSsql10.MSsqlSERVER\MSsql\Backup\TestDb.bak' WITH  NO_TruncATE , NOFORMAT,       name = N'TestDb-事务日志  备份',  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,  STATS = 10     GO          --接下来根据日志备份来恢复数据库:          RESTORE LOG [TestDb] FROM  disK = N'E:\MSsql2008\MSsql10.MSsqlSERVER\MSsql\Backup\TestDb.bak' WITH  file = 2,       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://outofmemory.cn/sjk/1175698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存