Microsoft SQL Server 事物日志中每个记录都由一个唯一的日志序列号(LSN)标识,如果 LSN2 大于 LSN1,则 LSN2 所标识的日志记录描述的更改发生在日志记录 LSN1 描述的更改之后。
顺序还原期间,还原完整备份后,数据被还原到进行备份的时间点相对应的 LSN,利用差异和日志备份可以将还原的数据库推到稍后的时间,该时间与一个更高的 LSN 相对应。
还原计划中,最重要的日志序列号(LSN)是第一个和最后一个 LSN。
-
first_lsn或FirstLSN:备份集中第一个或最早日志记录的日志序列号。对于数据备份和差异备份,第一个 LSN 标识的是需要此备份执行恢复的最早日志记录,对于日志备份,第一个 LSN 标识的是备份中包含的第一个日志记录。
-
last_lsn或LastLSN:备份集之后的下一条日志记录的序列号。最后一个 LSN 标识的是备份结束后的下一个日志记录。对于数据备份和差异备份(以及包含大容量日志操作的日志备份)。必须至少前滚到此 LSN,否则,还原期间复制的数据会出现不一致。对于日志备份,它包含的日志记录最多到(但不包含)此LSN。
日志序列号和数据备份或差异备份
对于数据备份或差异备份,first_lsn 和 last_lsn 之间的日志数据包含在备份中,这使得使用该备份(而无需日志备份)就可以恢复到 last_lsn。
对于数据备份或差异备份,如果按还原顺序使用备份,则 last_lsn 可能是最早的恢复点,如果需要更早的恢复点,则必须使用更早的备份。
当计划在还原数据备份或差异备份后使用哪个日志备份前滚时,通常将从该数据备份或差异备份之后的第一个日志备份开始,检查备份的属性时,你就会发现这样一个日志备份,其 first_lsn 小于或等于数据备份或差异备份中的 last_lsn,并且 last_lsn 大于数据备份或者差异备份中的 last_lsn。
日志序列号和日志链中的日志备份
新的日志链将随顺序局创建后的第一个完整数据库备份而启动,或在从简单恢复模式切换到完整或大容量日志恢复模式后启动。
first_lsn 和 last_lsn 用于将日志备份连成一个连续的序列(即日志链)。可以使用连续的日志备份序列前滚数据库(可以从最近的数据库备份或者差异备份前滚,也可以从丢失或损坏的数据库备份和差异备份的早期备份前滚)。
在日志备份中,first_lsn 是备份中第一个日志记录的 LSN,从此日志记录开始,日志备份最多包含到 LSN 为 last_lsn 的日志记录(但不包含该日志记录)。而且仅当早期备份(Backup_A)中的最后一个日志记录的 LSN 大于或等于后期备份(Backup_B)的第一个日志记录的 LSN 时,这两个日志备份才是连续的;也就是 Backup_A.last_lsn >= Backup_B.first_lsn。如果不是这样,这两个备份之间将存在空白。
这些 LSN 之间关系的意义如下:
-
A.last_lsn = B.last_lsn:则 B 通常是紧跟着 A 后进行的日志备份
-
A.last_lsn > B.last_lsn:存在重叠。重叠通常是由于创建仅复制日志备份或在时点还原后备份第一个日志引起的。重叠可能会涉及不同的恢复分叉。
日志链断开的原因
通常,SQL Server 数据库引擎会防止日志备份序列中出现空白,从而使日志链保持完整。但是,如果数据库管理员先将恢复模式更改为简单恢复模式,然后再将其改回完整或者大容量日志恢复模式,会使日志链断开。
由于日志链已断开,因此无法在涉及简单恢复模式的恢复模式中前滚。更改到完整或大容量日志恢复模式后,应使用新的差异基准或差异基准集。此外,也可以使用差异备份填补空白。
版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有