sql server 数据库差异还原

一、对正在使用的数据库,执行还原处理

   把当前正在使用的数据库文件和日志文件移动到 另个路径下, 然后再用完整备份文件进行还原 

restore DATABASE Test  from disk=N'F:\DBBackUp\Test\20160511155000_full.bak'  WITH NORECOVERY, REPLACE,
move 'Test'  to 'F:\DBBackUp\新建文件夹\Test.mdf',
move 'Test_log' to 'F:\DBBackUp\新建文件夹\Test_log.ldf'

GO
RESTORE DATABASE Test FROM DISK= N'F:\DBBackUp\Test\20160511155000_full.bak' 
GO


 

RECOVERY 和 NORECOVERY 的比较

仔细观察上述完整还原和差异还原的TSQL语句,我们可以看到在完整还原阶段,使用了WITH NORECOVERY,而差异还原,则是使用了RECOVERY

  • NORECOVERY 指定不发生回滚 从而使前滚按顺序在下一条语句中继续进行。在这种情况下,还原顺序可还原其他备份,并执行前滚。
  • RECOVERY(默认值)表示,应在完成当前备份前滚之后执行回滚。恢复数据库要求要还原的整个数据集(“前滚集”)必须与数据库一致 如果前滚集尚未前滚到与数据库保持一致的地步,并且指定了 RECOVERY,则数据库引擎将发出错误。
  • 因此RESTORE...WITH RECOVERY状态就表明此时数据库已经处于一致性状态了。一般都是数据库还原的最后一步才会使用RESTORE...WITH RECOVERY,其他时候都是使用RESTORE...WITH NORECOVERY。

2、完整备份、差异备份一起还原
restore DATABASE Test  from disk=N'F:\DBBackUp\Test\20160511155000_full.bak'  WITH NORECOVERY, REPLACE,
move 'Test'  to 'F:\DBBackUp\新建文件夹\Test.mdf',
move 'Test_log' to 'F:\DBBackUp\新建文件夹\Test_log.ldf'

GO
RESTORE DATABASE Test FROM DISK= N'F:\DBBackUp\Test\20160511155000_full.bak' WITH NORECOVERY
GO
RESTORE DATABASE Test FROM DISK= N'F:\DBBackUp\Test\20160511155600_diff.bak' WITH RECOVERY (最后一次差异备份)


场景:完整备份15:50进行;15:52差异:20160511155200_diff.bak;15:54差异:20160511155400_diff.bak
15:56差异:20160511155600_diff.bak;15:58差异:20160511155800_diff.bak;
那么,假设希望还原到15:56之前的数据,按上面例子即可。 
注:差异备份是相对上次完整备份来进行备份的,如:20160511155600_diff.bak 备份了15:50至15:56 期间的数据变化。

3、还原到某个时间点(可精确到秒)
restore DATABASE Test  from disk=N'F:\DBBackUp\Test\20160511155000_full.bak'  WITH NORECOVERY, REPLACE,
move 'Test'  to 'F:\DBBackUp\新建文件夹\Test.mdf',
move 'Test_log' to 'F:\DBBackUp\新建文件夹\Test_log.ldf'

GO
RESTORE DATABASE Test FROM DISK= N'F:\DBBackUp\Test\20160511155000_full.bak' WITH NORECOVERY
GO
RESTORE DATABASE Test FROM DISK= N'F:\DBBackUp\Test\20160511155600_diff.bak' WITHNORECOVERY
GO
--使用日志恢复数据库到10月15日15:59分:
RESTORE LOG Test  disk=N'F:\DBBackUp\Test\20160511155700_Log.bak' WITH RECOVERY, STOPAT='2016-05-11 15:56:40'
--精确到秒钟还原点

二、备份
1、差异:backup database @DbName to disk=@FileName with differential --差异备份数据库
2、完整:backup database @DbName to disk=@FileName with init 
3、日志:BACKUP LOG @DbName  TO DISK = @strbackup WITH INIT;

1).差异备份是以上一个全备为基点,这个期间所有差异数据的备份。
2).日志备份是基于前一个全备+日志备份为基点,这个期间的事务日志的备份。
3).在利用全备+日志备份时,需要有序并逐个还原所有日志备份。假设要还原周六的数据,则需要上周日的全备和周一到周六的所有日志备份才可以。如果有每天的差异备份,则只需要周日的全备+周五的差异备份+周六的日志备份即可。 


 DECLARE @FileName nvarchar(255)= 'D:\'
 DECLARE @DbName nvarchar(30) = 'Ciyt'
 DECLARE @DateStr nvarchar(20) = replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ','_'),':','')


 SET @FileName = @FileName + @DbName + '_' + @DateStr +'.bak'
 backup database @DbName to disk=@FileName with init
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值