我现在有情况。
SIMPLE 恢复模型中有一个数据库。
注意:
1.压缩未启用,将很快启用。2.SQL Server 2012 SP3
BackupSize: 8GB (Usually)<br/>
Last Saturday BackupSize: 73GB (yes, 73 !!)
这是因为一个应用程序使 2 个事务处于打开状态。
现在日志文件是 154GB。
Transaction: So far it inserted 90M records to a not so large table)
问题:
- FULL备份中,如果有open transaction,会记录多少LOG信息?
- 当 FULL 备份恢复时,它是否回滚了 OPEN 事务的操作?
- 如果是这样,为什么 FULL 备份甚至在备份完成后仍然打开时为 OPEN 事务备份 LOG(虽然在 SIMPLE 恢复模型上)。
- 如果我从 SQL Server 中终止 spid,它是否需要更多的日志空间来回滚?我们这里已经没有空间了!!
您问题的答案在Paul Randal 的博客中
是的,如果在完整备份完成时事务尚未提交,它将在恢复备份时回滚,简单地说,因为 SQL Server 在事务提交/完成之前完成备份时不知道“事务状态”。请阅读以下内容了解更多详情
了解 SQL Server 中的备份
如上所述,因为它不知道事务的状态,比如它是提交还是回滚,并且由于 SQL Server 中的事务首先写入事务日志,然后再对备份页面进行更改,因此它完成了备份工作建立足够的事务日志,以便如果事务提交,它可以在备份恢复后使数据库保持一致状态,如果事务在备份完成之前未提交,则备份将其视为未提交,并且何时恢复它们将没有关于更改的信息通过还原数据库中的该事务。
阅读 Paul Randal 指出的第一个神话
是的,它确实需要事务日志文件中的空间来回滚。回滚主要是单线程的,并撤消事务已完成的操作。
回滚:终止会话时会发生什么