使用多次覆盖相同时间段的备份来恢复数据库

3 sql-server

每个人

我有一些关于数据库还原顺序的问题。假设我有以下备份事件:

t00 Database creation

t01 FULL database backup 1

t02 Database DIFFERENTIAL backup 1

t03 Log backup 1
t04 log backup 2
t05 Log backup 3 
t06 log backup 4 
t07 log backup 5

t12 Full Database Backup 2

t13 Log backup 9 
t14 Log backup 10

t15 Disaster Hits!
Run Code Online (Sandbox Code Playgroud)

现在,假设我想将数据库恢复到日志备份4的末尾,我通常会做的是恢复

Full database backup 1, 
Log backup 1
Log backup 2
Log backup 3
Log backup 4
Run Code Online (Sandbox Code Playgroud)

我跳过Database DIFFERENTIAL backup 1是因为我认为它是多余的。但是我看过很多文章都包含Database DIFFERENTIAL backup 1在这个序列中。

问题是:如果我们要在序列中包含差异备份,我们不是要两次应用备份中包含的更改吗?

这两种方法在可能的数据丢失或性能方面有什么区别吗?

那么总体问题是:使用各种备份(完整、差异、日志、文件/文件组)恢复数据库是否在概念上可以,只要它们按从最早到最新的顺序恢复,并且备份跨越整个需要整个时间段,即使它们可能包含有关数据库更改的重叠信息?

谢谢

Rem*_*anu 6

差异备份只有一个目的:通过允许您跳过一个或多个日志备份来加快恢复速度。即,在上次 FULL 备份和有问题的 DIFFERENTIAL 之间进行的所有 LOG 备份。

因为,在你的榜样,你有没有的完整和差异之间的日志备份,那么有没有日志备份跳过所以没有恢复的速度增益。试图恢复 DIFFERENTIAL 是浪费时间。

例如,如果您像这样修改序列:

t01 FULL database backup 1
t02 Log backup 1
t03 log backup 2
t04 Log backup 3 
t05 log backup 4 
t06 Database DIFFERENTIAL backup 1
t07 log backup 5
Run Code Online (Sandbox Code Playgroud)

那么通过允许您跳过日志备份 1-4 的还原将是一个好处。

  • @JohnSmithSr。所有数据页都包含“last-modified-LSN”信息。当日志记录被重放时(即当日志备份被恢复时),日志记录的 LSN 与页面上次修改的 LSN 进行比较。只有比页面的 last-modified-LSN 更新的记录才会被实际重放(修改应用于数据)。对 LSN 较低的日志记录的修改*已包含在页面中*,无需应用。这就是恢复日志备份 5 安全的原因。 (2认同)