use*_*007 3 sql-server backup restore transaction-log
我正在考虑在 SQL Server 上恢复数据库,但我不了解与 LSN 相关的内容。这是我创建的示例数据库的 Management Studio 中“还原数据库”对话框的屏幕截图。
您会注意到有两个差异备份。如果每个差异备份都包含之前所有差异备份的事务数据,为什么第二个差异备份的 FirstLSN (22000000041800004) 会高于第一个差异备份的 FirstLSN (22000000039800037)?如果它涵盖相同的交易,为什么 LSN 不会重叠?
如果您查看有关此内容的Microsoft 文档,它会指出
对于数据和差异备份,第一个 LSN 标识使用此备份执行恢复所需的最早日志记录。
因此,如果我要使用第二个差异备份来恢复数据库,那么第二个差异备份的 FirstLSN 将从完整备份停止的地方开始 (22000000038800001) 是否合理?恢复第二个差异将应用创建完整备份后发生的所有事务,不是吗?
我不明白系统如何解释完整备份和第二个差异之间的 LSN 差距。
为什么第二次差异备份的 FirstLSN (22000000041800004) 会高于第一次差异备份的 FirstLSN (22000000039800037)?
在处理数据(完整、文件等)或所述备份的差异版本时,FirstLSN 和 LastLSN 实际上意味着与推断的不同。
处理差异时的 FirstLSN 意味着这是使用该备份开始恢复所需的 LSN(这意味着它将在该 lsn 处启动进程)。
处理差异时的 LastLSN 意味着这是任何后续还原操作(在这种情况下,您的日志备份)需要开始的 LSN。例如,如果您想应用任何额外的日志,首先可以应用的日志备份需要在其中保存 LastLSN 值才能应用。
但是,在处理日志备份时,这个定义会发生变化,这将是您对此事的最初想法。
编辑:刚刚找到这个,这可能会有所帮助。
编辑:更新问题所以更新答案。
因此,如果我要使用第二个差异备份来恢复数据库,那么第二个差异备份的 FirstLSN 将从完整备份停止的地方开始 (22000000038800001) 是否合理?
这是一个差异,所以它只保存事务一致性所需的小日志。不一定是这样,因为这不是它开始恢复的第一个 LSN。此差异可能来自 1.5 年前的完整备份基础(请不要让它在完整备份之间走那么久)并且在过去的 1.5 年中很可能没有任何 LSN。它将拥有所有更改的范围,但没有日志事务(同样,它会有少量保持一致)。它只是告诉您它将在该 LSN 上开始它的恢复过程。
恢复第二个差异将应用创建完整备份后发生的所有事务,不是吗?
它将恢复自上次完整备份以来更改的所有范围。这些可能反映也可能不反映实际变化。例如,将 1000 行放入随后回滚的空表的大型插入语句。分配给该表的盘区,虽然自从它回滚后不会有任何内容,但在更改时仍将是差异的一部分。所有的差异(好吧,不是全部,但主要是)是查看 DCM 并备份这些范围,确定它需要多少日志,然后您就有了差异备份。所以它不会应用交易(如重播它们),但它会保留它们的结果。
我不明白系统如何解释完整备份和第二个差异之间的 LSN 差距。
这并不是真正的差距,它包含自那时以来发生的所有变化(不是作为事务,而是作为改变的范围),然后是一点日志。“差距”是更改的范围部分,而“弥补”是差异备份中的一点点日志以使其保持一致。
但是为什么完整备份和差异备份需要存储 LSN 值呢?
他们也需要了解有关他们自己的信息。例如,假设一个完整备份丢失了,但您有一个基于较新完整备份的差异,而您有一个较旧的完整备份。您可以恢复原始的旧备份、日志,然后是当您最终到达需要的位置并继续时的差异……但是,如果您没有将值存储在某处,您怎么知道需要在哪里呢?如果我们没有这些值,我们作为管理员如何知道哪些订单商品进来了?
归档时间: |
|
查看次数: |
1705 次 |
最近记录: |