SQL Server 数据恢复到指点时间点(完整恢复)

说到数据库恢复,其实我们一般最常见的有两种,一种就是简单恢复,通过备份的bak文件直接恢复数据库,缺点就是有可能数据丢失。另外一种就是通过备份的数据+事务日志还原数据。但是后者还原的话我们需要保证事务日志的完整性。我们今天就主要介绍的是第二种,所有的操作过程我们使用的是SSMS进行操作的。

注:使用第二种方法还原数据的时候需要注意的问题:1、要准备好之前的完整备份的数据,2、备份全新的事务日志。3、通过完整备份的数据进行完整还原。4、通过备份的全新的事务日志进行指定时间点的数据还原。

我们首先创建一个测试数据库---DB2,然后创建一个表info

定义字段信息

技术分享图片

我们插入数据

select * from info
insert into info(idcode,age)values(‘zs‘,18)
insert into info(idcode,age)values(‘ls‘,20)
insert into info(idcode,age)values(‘gwl‘,27)

技术分享图片

接下来我们备份数据,备份路劲D:DB_BACKUP

右击数据库---任务--备份

技术分享图片

备份类型:完整。

备份路劲:D:db_backupdb2.bak

技术分享图片

备份完成

技术分享图片

备份完成的文件

技术分享图片

成功备份后,我们增加几条数据,然后删除几条数据(我们需要注意时间点,方便后面的操作)

此时就当是我们误操作结果;误操作后,我们正常还原了就可以了

需要注意的是,输入的写入和删除有可能是不同的用户进行操作的,所以 通过还原肯定是数据丢失了,所以我们通过完全备份恢复完成后,还需要通过log进行还原。

当前时间时21:32

技术分享图片

我们插入了几条数据

select * from info
insert into info(idcode,age)values(‘xll‘,118)
insert into info(idcode,age)values(‘wc‘,210)
insert into info(idcode,age)values(‘lc‘,127)

技术分享图片

我们在过几分钟进行数据删除--删除2两条测试数据

当前时间为:

技术分享图片

接下来我们删除两条数据

select * from info
delete info where idcode = ‘ls‘
delete info where idcode = ‘gwl‘

技术分享图片

此时我们发现数据有异常所以需要通过备份进行还原。但是我们的备份之后,做了一些数据的插入,如果用之前备份的恢复的话,数据肯定有丢失,所以我们还需要借助日志进行还原。

所以我们需要通过完整备份进行恢复,然后通过log进行恢复,然后恢复到指定的时间点。

在恢复完整备份之前,我们需要进行一次全新的事务日志备份。

其实备份事务日志的目录是为了将其写入截断,保证数据的完整性

技术分享图片

数据库---右击--任务---备份---备份类型--事务日志

技术分享图片

备份成功后

技术分享图片

此时我们需要通过完整备份进行还原以下数据

数据库---任务---还原--数据库

技术分享图片

选择设备---浏览备份的数据库文件

技术分享图片

记住,我们一定要在选项中选择 norecovery   
恢复状态:RESTORE WITH NORECOVERY

技术分享图片

开始还原提示以下信息:

技术分享图片

我们也可以使用以下脚本进行还原

USE [master]
BACKUP LOG [DB2] TO DISK = N‘D:Microsoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupDB2_LogBackup_2017-03-19_22-40-40.bak‘ WITH NOFORMAT, NOINIT, NAME = N‘DB2_LogBackup_2017-03-19_22-40-40‘, NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5
RESTORE DATABASE [DB2] FROM DISK = N‘D:DB_BACKUPDB2.bak‘ WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5
GO

出现以上问题,我们有两种解决方法

1、还原数据库时,点击选择页上的选项,勾选覆盖现有数据库(WITH REPLACE),点确定后即可成功还原数据库(推荐此方法)。

技术分享图片

2、进行还原操作时,点击选择页上的选项,勾选保持源数据库处于正在还原状态(BACKUP LOG WITH NORECOVERY),即可解决问题。

技术分享图片

我们选择第二种方法可以正常恢复成功

技术分享图片

此时我们查看到数据库一直再提示---正在还原中,该现象为正常的。

技术分享图片

接下来我们要通过事务日志进行数据还原。

数据库---任务---还原---事务日志

技术分享图片

浏览到保存的事务日志文件—DB2.trn

技术分享图片

然后我们需要选择删除数据的日期及时间:我们上面记载了删除数据的日期及时间 21:36

此时是恢复数据的主要关键地方。

技术分享图片

确认的时间点信息

技术分享图片

我们此时需要单击选项菜单:

恢复状态:回滚未提交的事务,使用数据库处理可以使用的状态。无法还原其他事务日志(RESTORE WITH RECOVERY)

技术分享图片

我们也可以通过脚本进行数据还原。

RESTORE LOG [DB2] FROM DISK = N‘D:DB_BACKUPDB.trn‘ WITH FILE = 1, NOUNLOAD, STATS = 10, STOPAT = N‘2017-03-19T21:36:01‘
GO

技术分享图片

还原成功后,数据库状态显示正常

技术分享图片

接下来我们查看数据,恢复正常了;

技术分享图片