企业网站开发韵茵,新浪 博客可以做网站优化吗,太白县住房和城乡建设局网站,建设博客网站制作/* 真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除 在删除之前#xff0c;我做过一次完整的数据库备份#xff0c;再删除之后#xff0c;我第一时 间做了尾日志备份 也就是说 我手上现在有一份最新的完整备份 和删除数据之后的尾 日… /* 真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除 在删除之前我做过一次完整的数据库备份再删除之后我第一时 间做了尾日志备份 也就是说 我手上现在有一份最新的完整备份 和删除数据之后的尾 日志备份 */ --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,男,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 NE:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak WITH NOFORMAT, NOINIT, NAME NTestDb-完整 数据库 备份, 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()--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 NE:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak WITH NO_TRUNCATE , NOFORMAT, NOINIT, NAME NTestDb-事务日志 备份, SKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS 10, CHECKSUM GO declare backupSetId as int select backupSetId position from msdb..backupset where database_nameNTestDb and backup_set_id(select max(backup_set_id) from msdb..backupset where database_nameNTestDb ) if backupSetId is null begin raiserror(N验证失败。找不到数据库“TestDb”的备份信息。, 16, 1) end RESTORE VERIFYONLY FROM DISK NE:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak WITH FILE backupSetId, NOUNLOAD, NOREWIND GO --现在我们来还原数据库,由于我错误的删除了数据 --首先我根据完整备份进行一次还原,也就是说把数据库还原到 RESTORE DATABASE [TestDb] FROM DISK NE:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak WITH FILE 1, NORECOVERY, NOUNLOAD, STATS 10 GO --接下来根据日志备份来恢复数据库: RESTORE LOG [TestDb] FROM DISK NE:\MSSQL2008\MSSQL10.MSSQLSERVER\MSSQL\Backup\TestDb.bak WITH FILE 2, NOUNLOAD, STATS 10, STOPAT N2013-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