/* 真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除 在删除之前,我做过一次完整的数据库备份,再删除之后,我第一时 间做了尾日志备份 也就是说 我手上现在有一份最新的完整备份 和删除数据之后的尾 日志备份 */ -->>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'某个时间点')总结
以上是内存溢出为你收集整理的误删表数据,如何恢复过来全部内容,希望文章能够帮你解决误删表数据,如何恢复过来所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)