发布完整备份后,系统如何知道要从事务日志备份中还原哪些事务?

时间:2018-10-01 09:59:12

标签: sql-server database-backups database-restore transaction-log

完全备份不会截断事务日志文件。

假设。情况:

  1. 上午6点进行完整备份
  2. 上午10点的TLog备份
  3. 在1PM进行完整备份
  4. 下午6点的TLog备份
  5. 下一秒钟立即崩溃(因此无需尾日志备份)

还原步骤:

  1. 还原从第3点开始的完整备份(包含截至下午1点的数据)
  2. 然后,从步骤4恢复日志备份(包含从上午10点到下午6点的日志)

问题::在恢复过程中,系统如何知道只需要重播日志文件的某些部分(从1PM [排除10AM到1PM ])。数据库?它会检查事务日志备份中的时间戳以与完整备份进行比较吗?还是检查LSN?

同样,在另一种情况下,假设我们在10AM进行完整备份,然后在12PM进行事务日志备份。事务日志将具有所有直到12PM的事务(甚至在10AM之前),前提是db在10AM之前存在并且没有以前的事务日志备份。现在,当我们还原完整备份,然后应用事务日志备份时,系统如何知道仅需要重播10AM日志中的事务?由于10AM之前的所有备份都已作为完整备份还原的一部分存在。是通过时间戳还是LSN检查的?

2 个答案:

答案 0 :(得分:1)

在您的示例中,两个日志备份是单独备份
每个备份仅具有上次完整备份中的活动,因此由于1PM完整备份,较早的日志备份没有任何意义。

通常..系统使用LSN或日志序列号

系统从备份文件中读取启动和停止LSN,并与数据库LSN兼容。如果它们放在一起,则使用备份文件。否则会出现错误。

编辑:不是基于时间戳

答案 1 :(得分:1)

取决于步骤5中CRASH的原因。如果仍然可以备份事务日志,则它可能恢复到下午6:01。如果崩溃严重,那么很可能在6:00 pm和6:01 pm之间丢失1分钟的交易。

通过6:00 pm日志备份,您可以始终恢复到6:00 pm(或使用STOPAT或STOPATMARK还原选项恢复到1:00 pm至6:00 pm之间的任何时间点)

在发生某种灾难之后,尝试备份日志(在某些地方备份日志的尾部)通常是有效恢复的第一步。