还原SQL Server数据库到指定时间点

安全及维护 admin 472℃ 0评论

警告:如果试图恢复客户的数据库到指定时间点,千万不能直接在客户服务器上进行恢复操作,以免造成严重后果。而应该把当前客户数据库做个完整备份,把.bak文件拷贝到本地,还原到本地进行操作。数据恢复后,再想办法把相应数据导入客户数据库。
一、 SQL Server可使用事务日志恢复到指定时间点。
1.1 这个恢复需要有两个前提条件:
1. 至少有一个误删除之前的数据库完全备份。
2. 数据库的恢复模式(Recovery mode)是“完整(Full)”。
针对这两个前提条件,会有三种情况:
情况一:如果这两个前提条件都存在,通过SQL语句只需三步就能恢复,无需借助第三方工具。

2016-01-16_193525

情况二:如果第1个前提条件不存在,第2个前提条件存在,需要借助第三方工具。
情况三:如果第2个前提条件不存在,无法恢复。所以,一定要将数据库恢复模式设置为“完整(Full)”。
1.2 查看数据库的恢复模式
–数据库恢复模式有三种:
–1:FULL(完整)、2:BULK_LOGGED(大容量日志)、3:SIMPLE(简单)
–查看数据库的恢复模式
SELECT name,recovery_model
FROM sys.databases
WHERE name = ‘MyTestDB’

2016-01-16_200408

1.3 当恢复模式为 SIMPLE 时,不允许使用 BACKUP LOG 语句

2016-01-16_200829

二、首先做了一次完整备份,然后依次做了2次事务日志备份,现在需要还原数据库到第2次误删数据后的时间点。

2016-01-16_201050

三、如果没有之前的(历史)事务日志备份文件,如何进行数据恢复?

2016-01-16_201249

3.1 结论:如果某数据库有过2次事务日志备份,如果要恢复第2次误删的数据,但是没有第1次事务日志备份文件,那么需要一个第1次事务日志备份后的完整备份文件。
四、错误案例
4.1 如果是在服务器A上误删了数据,如果把误删后的数据库备份文件还原到服务器B上来,然后在服务器B上备份事务日志文件进行数据恢复,我发现这样会报错,而如果把服务器A的数据库文件(.mdf和.ldf文件)拷贝至服务器B,然后在服务器B上备份事务日志文件再做数据恢复,就不会有问题。

4.2发现把另一台服务器上的数据库备份文件还原到本地后,在本地执行backup log POMDB to Disk=’D:Res\POMDB.log’ with init 得到的日志文件很小,没什么用。而应该在服务器上备份,而且,我还发现在服务器上第一次备份得到的.log文件比较大,第2次备份得到的文件就很小了,原因是第二次备份是在第一次备份的基础之上备份的

2016-01-16_201407

2016-01-16_201517

2016-01-16_201624

4.3 指定的还原时间大于事务日志备份时间,出现如下提示,数据库还是保持为还原状态(即数据库图标上出现【正在还原】字样)

2016-01-16_201726

4.4 如果依次进行了2次事务日志备份,无法使用第2次的事务日志备份文件恢复第1次备份之前误删的数据

2016-01-16_201828

4.5 也无法使用第2次的事务日志备份文件恢复第2次备份之前误删的数据

2016-01-16_201929

五、关于事务日志备份文件的LSN
5.1 打开第1次备份的事务日志备份文件

2016-01-16_202033

5.2 打开第2次备份的事务日志备份文件,发现LSN是接着上一次备份来的。

2016-01-16_202159

5.3 结论:如何要恢复第2次误删的数据,必须先还原第1次的事务日志备份文件,然后再还原第2次的事务日志备份文件。

 

转载请注明:森大科技官方博客 » 还原SQL Server数据库到指定时间点

喜欢 (2)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址