SQLSERVER2012数据恢复过程
程序员文章站
2022-05-07 21:53:09
...
由于长时间从事企事业单位的应用系统开发,前往用户现场升级、调试系统是比较常做的事情,但是就在昨日,由于同事的失误在毫无知觉的情况下误删了教材数据库几乎所有的数据,一种不妙感觉油然而生,立即查询,感觉头发都立起来了,心想这下大半年的心血要完了。
为了迅速恢复系统的使用,在当时的情况下立即关闭相关系统的访问入口,前后共花费不到五分钟。经过思考,立即将最近的一次备份文件进行还原,从而保证了系统的正常运行,但是此举也不可避免的可能会丢掉某些数据。
另外事情已经发生,如何做才能为以后的数据恢复做准备呢,以下是自己的观点:
1、务必冷静,事情已经发生不可慌乱。
2、立即查看当前时间,最好能够精确到秒,并做记录。
3、应立即向直接上级反映此事,不可隐瞒,防止事态扩大。
4、如果权限允许,应当立即停止相关应用,防止有新的数据写入数据库。
事后一直不放心,当下次再出现这种情况的时候,该如何对数据进行数据恢复,尽可能的减小损失呢(做不到完全避免损失),因此从网上查阅大量资料并进行整理。之前生产数据库使用的是sqlserver2000和2005,当时也出现过误删数据的情况,用LogExlorerForSQL很轻松就恢复了数据,现在数据库升级到2012了这个工具无法使用了,因此只能采用其他办法,在此需要特别鸣谢CSDN一位大神的文章,在此构建一个新的数据库模拟数据恢复全过程。
1、构建新数据库以及写入一些数据,新的数据库名称拟定为TESTDB,通过新建数据库来完成。
2、为刚刚新构建的数据库做一次完整备份,这个是前提,没有一份完整备份文件是无法进行接下来的操作的。备份时注意,恢复模式一定要选完整,如果是其他类型那恐怕就没有下文了。一般来讲新建数据库的时候,默认不要去改恢复模式这个属性。
3、创建新的测试表并写入几条新数据。
Create Table TestDB (fID INT,fName Varchar(20));
Insert Into TestDB (fID,fName) Values (1,'Paul01');
Insert Into TestDB (fID,fName) Values (2,'Paul02');
Insert Into TestDB (fID,fName) Values (3,'Paul03');
Insert Into TestDB (fID,fName) Values (4,'Paul04');
Insert Into TestDB (fID,fName) Values (5,'Paul05');
Select * From TestDB;
fID fName
1 Paul01
2 Paul02
3 Paul03
4 Paul04
5 Paul05
见图一
4、删除数据,让悲剧重现,记住此时要记录时间点,在现实中往往会由于慌乱忘记记录,但是希望看了这个文章之后能够记住此事。
SELECT GETDATE()
2017-12-29 14:53:45.793
UPDATE TestDB SET fName = '';
Select * From TestDB;
fID fName
1
2
3
4
5
好既然悲剧已经发生,也有了心理准备和恢复前准备,此刻最好看一下系统时间。接下来就要演示如何进行数据恢复。
SELECT GETDATE()
2017-12-29 14:55:32.673
5、做事务日志备份,做事务日志备份需要注意一下一点,如图二所示
备份类型:选择事务日志,如果不能选择或只有差异,说明你的数据库不是2012版本创建的,那么就不能做什么了。
备份路径选择默认就好,
进入【选项】菜单,
选择【备份到现有介质集(E)】
选择【追加到现有备份集(H)】
可靠性选择
完成后验证备份
写入介质前检查校验和(F)
事务日志
备份日志尾部,并使数据库处于还原状态(L)
压缩属性可以不选择。
参见图三和图四,点击【确定】
点击确定备份成功,此时数据库将显示为正在还原状态
注意:如果备份失败,请检查该数据库是否正在被占用,如果是请kill。
同时请确认【用系统账号登录】
6、还原完整备份
数据库处于正在还原状态,右键【数据库】--【任务】--【还原】--【文件和文件组】,
选择最近的一次完整备份。此时,需要在“选项”中选择第二种还原方式,具体如下图。
如上图,勾选完整数据备份文件。
如上图,恢复状态选择第二种,不对数据库执行任何操作,不回滚未提交的事务。可以还原其它事务日志。
(Restore with NoRecovery)
从字面意思就知道为什么要选择这种。
参见图五和图六
7、接着还原备份的事务日志,图七
完整备份还原完毕,接着要对事务日志进行还原,右键【数据库】--【任务】--【还原】--【事务日志】,如下图:
还原事务日志的时候需要特别注意“时间点”这个设置,其他不需要设置。
时间点选择为误删数据的时间点之前就可以恢复出误删的数据,这里选择:2017-12-29 14:54:01
所以之前强调要查看一下时间。如下图所示:
8、点击确定,在确定等待还原成功,数据库变成可用状态。此时后再查询,数据已经恢复
如果查询发现数据不是你想要的,那么可以重复上述的操作,从备份事务日志开始,然后最后选择时间点的时候在缩小范围。
以上,完整的演示了个人在恢复数据过程中的总结。当然前提是允许这样干,当然大型电子商务系统、高并发系统应该不适用,肯定也不会出现误删数据的情况,都有对应的解决方案避免此类情况发生。