一、对正在使用的数据库,执行还原处理
把当前正在使用的数据库文件和日志文件移动到 另个路径下, 然后再用完整备份文件进行还原
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 的比较
完整还原阶段,使用了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
--精确到秒钟还原点
二、备份
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