还原数据库到指定时间点

SQL Server admin 43℃ 0评论

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1719

 

警告:如果试图恢复客户的数据库到指定时间点,千万不能直接在客户服务器上进行恢复操作,以免造成严重后果。而应该把当前客户数据库做个完整备份,把.bak文件拷贝到本地,还原到本地进行操作。数据恢复后,再想办法把相应数据导入客户数据库。

  • SQL Server可使用事务日志恢复到指定时间点。

1.1 这个恢复需要有两个前提条件:

  1. 至少有一个误删除之前的数据库完全备份。
  2. 数据库的恢复模式(Recovery mode)是“完整(Full)”。

针对这两个前提条件,会有三种情况:

情况一:如果这两个前提条件都存在,通过SQL语句只需三步就能恢复,无需借助第三方工具。

1

情况二:如果第1个前提条件不存在,第2个前提条件存在,需要借助第三方工具。

情况三:如果第2个前提条件不存在,无法恢复。所以,一定要将数据库恢复模式设置为完整(Full

1.2 查看数据库的恢复模式

–数据库恢复模式有三种:

–1:FULL(完整)、2:BULK_LOGGED(大容量日志)、3:SIMPLE(简单)

–查看数据库的恢复模式

SELECT name,recovery_model

FROM sys.databases

WHERE name = ‘MyTestDB’

2

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

3

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

4

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

5

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次备份得到的文件就很小了,原因是第二次备份是在第一次备份的基础之上备份的

6

7

8

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

9

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

10

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

11

五、关于事务日志备份文件的LSN

5.1 打开第1次备份的事务日志备份文件

12

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

13

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

 

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1719

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

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

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

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