我有一个完全记录的数据库,每天只进行一些更改。并且每小时进行一次事务日志备份。上午 9:30 发生单行更新(单个事务),然后在上午 10 点日志备份中截断相应的 VLF。
我知道截断并不意味着删除,VLF 徘徊等待被覆盖。
然后在上午 10:30 再次更新记录。
所以我的问题是,如果数据库上没有进一步的事务,VLF(或来自它的数据)会出现在上午 11 点日志备份的 TRN 中吗?
即两个更新的完整历史记录可以出现在上午 11 点的 TRN 文件中吗?
我之所以问这个问题是因为我试图理解我在一些著名的日志阅读软件中看到的东西。
谢谢
这不是(确切地)它是如何工作的。该日志记录将在上午 10:00 事务日志备份中进行备份,但 VLF 仅在“已满”并且正在将事务写入“下一个”VLF 时才会被清除。
有关详细信息,请查看 Paul Randal 关于该主题的文章:
为什么 log_reuse_wait_desc 在做日志备份后说 LOG_BACKUP?
你的另一个问题:
我不这么认为,尽管知道您在日志阅读软件中看到的让您质疑的内容会很有趣。
如SQL Server Transaction Log Architecture and Management Guide中所述,上午 10:00 的备份将提升 MinLSN ,而上午 11:00 的备份将仅包括第二个
UPDATE
事务。事务日志备份应仅包含自上次进行事务日志备份以来数据库上发生的事务,并且不包括任何以前的事务日志备份的事务。
每次进行事务日志备份时,事务日志文件都会在内部清空,并且该空间会在新事务发生时被重新使用和覆盖。
要查看完整的历史记录,您需要将所有相关的事务日志备份到您想要查看的历史记录中的时间点。