sql事务日志备份理论

时间:2017-09-10 17:13:19

标签: sql sql-server logging transactions

我对事务日志的了解越多,我就越困惑。我想很多人都错了。我只是想确保理解这个理论。如果不对,请纠正我的想法。

日志与完全备份或差异备份无关(无任何绑定或相关)。该日志包含自上次日志备份以来对数据库的所有更改。因此日志链。在对数据库进行更改时,会在日志中放置一个副本,并在将其复制到数据库时进行标记。我想把它看作是从一开始就所有变化的完整历史。备份事务日志(LOG)时会清除它。连续的流/变化记录。

是的,日志链从创建的第一个完整备份开始。但是,在没有重置日志链之后的任何满员。

  1. 加载到要修改的数据库的内存部分
  2. 将更改/查询复制到事务日志
  3. 更改内存中已加载的部分
  4. 提交磁盘和检查点日志
  5. 全双工的登录 -log-数 - 对数

    我们假设你做了一个完整的备份。然后记录备份。第一个日志将包含在完全备份之前提交的更改。它只是日志的本质。同样,日志不以任何方式与完整或差异相关。我假设当您恢复完整日志之后,通过将完整备份的日期和时间与日志进行比较,它将知道从何处开始恢复。您不想重新提交已在完整备份中完成的更改。这是我的思考过程。




    我们假设我们有这个备份过程:

    每周完整/每晚差异/每小时记录

    为了简洁起见,我不会用大量的日志备份来填充示例。它应该得到我的观点。

    展开 - 的登录 - 的登录 - 的登录 - 的登录 -Diff-的登录 - 的登录 - 的登录 - 的登录 -Diff-的登录 - 的登录 - 的登录 - 的登录

  6. 我们说我需要恢复到最新的备份。如果我的差异很糟糕怎么办?我仍然可以恢复到任何时间点,因为我的完整和日志都很好。我不需要差异。虽然我的恢复可能需要数天。 XD

    展开 -log-数 - 对数对数的Diff-数 - 对数 - 对数的对数的 DIFF - 的登录 - 登录 - 的登录 - 的登录

  7. 我们说我需要恢复到最新的备份。最快的方法是恢复完整备份,然后恢复最新的Diff。最后,我将在diff之后恢复所有日志。我假设sql会将日志的日期/时间与diff进行比较并重新应用正确的更改。同样,日志与完全或差异无关。它们只是自上次日志备份以来的连续流/变更记录(独立)。

    问题:

  8. 我是否正确理解日志?
  9. 我的恢复示例是否正确?
  10. 如果日志损坏,如何重新启动日志链?显然,完整备份不会重新启动日志链。

    网上似乎有20个不同的答案相互冲突。没有人可以直截了当。

    https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/transaction-log-backups-sql-server

    https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2030-restarting-a-log-backup-chain-requires-a-full-database-backup/

1 个答案:

答案 0 :(得分:0)

我认为您对日志和恢复的理解对于使用FULL RECOVERY模式的数据库是正确的(这是默认设置)。作为次要评论,SQL Server在决定哪些日志记录相关时不使用日期/时间,它使用日志序列号(LSN)但概念是相同的。

回答上一个问题:完整备份不会使日志链失效是正确的,但链中的日志备份损坏或丢失会使故障点之前的所有日志备份失效。如果日志文件损坏,则还原选项为(1)上次完整备份加上任何差异,或者(2)如果在日志失败后进行完整备份“B”,则可以恢复完整备份“B”并恢复后续日志备份。选项二为您提供时间点恢复到'B'之后的任何点,因为您再次拥有一条完整的链。

您上一个问题的含义是:如果您有定期的完整备份和日志备份,则损坏的日志只会在下一次良好的完整备份之前生效。

免责声明:我不是DBA,更像是对备份和恢复感兴趣的数据库开发人员,并且必须为Microsoft MCSE进行一些研究。