此备份集中的日志太新,但它来自上次完整备份之前!

ale*_*exk 5 sql-server backup ssms restore transaction-log

我正在尝试将完整的数据库备份和事务日志还原到最新的事务日志。我已将交易日志设置为每 15 分钟发送一次。此设置是通过 SMSS GUI 执行的。完整数据库备份每天上午 12 点开始,通常在凌晨 2 点之前完成。

首先,我使用 NORECOVERY 恢复完整备份。:

USE [master]
RESTORE DATABASE [DBNAME] FROM  DISK = N'X:\path\to\DBNAME.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 5
GO
Run Code Online (Sandbox Code Playgroud)

这将成功完成。

然后,我获取最旧的事务日志并运行以下命令:

RESTORE LOG DBNAME FROM DISK = 'X:\path\to\OldestTransactionLog.trn' WITH NORECOVERY;
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Msg 4305, Level 16, State 1, Line 10
The log in this backup set begins at LSN 421814812000000025600001, which is too recent to apply to the database. An earlier log backup that includes LSN 421787067000000013800001 can be restored.
Msg 3013, Level 16, State 1, Line 10
RESTORE LOG is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这太近了!

我的备份发生在凌晨 12 点,并在凌晨 2 点完成。

起初我从上午 12 点开始尝试事务日志,然后看到“太近”消息,尝试了我拥有的最旧的日志,从昨天上午 11:30 开始。

所以这个事务日志应该比最近的完整数据库备份早半天。

我在这里错过了什么吗?这怎么可能是最近的?

任何帮助表示赞赏 - 这不在生产系统上,别担心!

Kin*_*hah 2

完整备份的最后一个 LSN 应与日志备份的最后一个 LSN 匹配。这将是您的第一个日志备份,之后连续的日志备份将具有A.LAST_LSN= B.FIRST_LSN--> 其中 B = 在 A 之后立即进行的日志备份。

来自博尔:

在此输入图像描述

现在看看您收到的错误:

此备份集中的日志从 LSN 421814812000000025600001 开始,该日志太新,无法应用于数据库。可以恢复包含 LSN 421787067000000013800001的早期日志备份

因此,本质上,LSN 中有间隙,因此无法恢复日志备份。

我建议使用Restore Gene - 来自动执行数据库恢复。您甚至可以通过 PowerShell 使用它来完全自动化恢复。(我已经使用过它并且非常有用。)

请参阅我的回答以更好地了解完整备份和 LSN 的工作原理。