2015年4月11日星期六

一次数据库恢复

晚上上着线,领导突然轻声跟我说,我执行了这个。。。然后指着屏幕上的一句DELETE语句,我瞬间明白了,这是错删数据了,好吧,苦逼的我只好去折腾数据恢复工作,谁叫咱是专业擦屁股的呢。
先想想吧,数据库是SQL Server,有日志,可以从操作日志找到记录并恢复,不过这个我没做过,业务不熟;另外我们有备份,每天一个完整的,20分钟一次增量的,许久没做了,业务有点生疏,但是还算做过,心里有底,于是决定采用这种方式。
下面还是贴上代码吧:
restore database RY_20150410 from disk = 'E:\sqlback\RY_backup_2015_04_10_040001_5063465.bak' with norecovery,
MOVE 'RY' TO 'E:\sqldatatemp\AdventureWorksCopy_Data.mdf', 
MOVE 'RY_log' TO 'E:\sqldatatemp\AdventureWorksCopy_Log.ldf';


restore log RY_20150410 from disk = 'E:\sqlback\log\RY_backup_2015_04_10_042001_3408063.trn' with norecovery
restore log RY_20150410 from disk = 'E:\sqlback\log\RY_backup_2015_04_10_044001_9740908.trn' with norecovery
restore log RY_20150410 from disk = 'E:\sqlback\log\RY_backup_2015_04_10_050001_5706013.trn' with norecovery
.
.
.
restore log RY_20150410 from disk = 'E:\sqlback\log\RY_backup_2015_04_10_184002_3865400.trn' with norecovery


select state_desc,name,user_access_desc from sys.databases where name='RY_20150410'

--之前的恢复语句后面都加了with norecovery,就是指定恢复点,但是不进行实际的恢复
--最后恢复整个库
restore database RY_20150410 with recovery
还好我来这家公司之后做的第一件事就是做了数据库的备份计划,数据备份这东西不用的时候永远体现不出价值,一旦需要用了,那价值是无穷的。