收缩 SQL Server 事务日志是否会从日志中删除事务?

fli*_*ubt 2 sql-server-2008

我知道缩小日志是反指示的,并且已经被多次覆盖,但我刚刚遇到了以下令人困惑的情况:

我们有一次失控查询尝试删除如此多的记录,以至于在运行 SQL Server 2008 且数据库设置为完全恢复模式的 Windows Server 2008-R2 计算机上,事务日志文件增长到 30GB。我的老板运行了一个脚本来备份数据库一次,然后将事务日志缩小到事务日志文件只有 1024K 的程度。他说事务日志的大小并没有通过执行备份而缩小,而是循环运行以减少未使用的空间。如何仅通过清理未使用的空间将文件大小减少 30,000 倍?我们是否因为缩小日志而丢失了有用的数据?

JNK*_*JNK 5

收缩”日志实际上是“清除”日志。

日志基本上是已执行操作的列表,用作回滚、还原、检查点等的参考。

该空间并非“未使用”,但它包含已提交并反映在执行的备份中的事务。

您的老板清除了日志文件中的所有事务,但由于您刚刚运行了备份,这是可以接受的,因为没有任何事务未提交。

  • @xanatos - 在这种情况下,这些事务仍会在日志中,但在提交之前他将无法恢复该空间。在这种情况下显然不是这种情况。 (2认同)
  • @flipdoubt - 回滚是**使用日志文件** 撤消删除。这就是日志变得如此大的原因——它必须跟踪所有数据更改,直到您提交或回滚事务。这正是跟踪您正在执行的工作所需的大小。 (2认同)