Pet*_*ock 4 sql-server backup logs truncate
这个问题在专家交流中尝试了两次,但没有真正的答案。
我知道我不应该缩小日志文件 - 这不是问题。
如果你想回答一个人不应该这样做 - 这已经被多次确认,是的,这不是这个问题的目标。
设置为简单备份也不是一个选项。
多年来一直困扰着我 - 事实上我现在知道为什么应该备份它两次。
我最近看到第一个日志文件每次都能够在第一次尝试时缩小 - 令人难以置信。我向那个人询问了这件事,我只能说“在发布之前重新组织”——我不知道他指的是什么。我无法再次与他联系。
我从 EE 上的现有帖子中知道这一点:“收缩删除日志的非活动部分。为了不活动,必须截断日志,这作为日志备份的一部分发生。
但是,事务日志由许多以循环方式使用的虚拟日志文件组成。只能修剪文件末尾的虚拟日志,因此如果 SQL Server 当前正在使用最后一个虚拟日志,则无法删除任何内容。sql 7 中的旧修复是运行一个脚本,该脚本运行足够多的虚拟事务来填充日志并将指针环绕到第一个虚拟日志(如果您愿意,仍然可以使用此方法)。
http://support.microsoft.com/kb/256650/EN-US
DBCC 现在为您执行此操作,但仍需要额外的步骤再次截断日志,以便可以删除非活动空间”
来自另一位用户:“我所要做的就是停止上次管理员在数据库维护计划中留下的自动优化和完整性检查。”
AMt*_*two 14
SQL Server 的事务日志文件由虚拟日志文件 (VLF) 组成。当您收缩日志文件时,它只会在文件末尾释放未使用的 VLF。总会有至少一个 VLF 用于当前活动。
考虑这个简化的例子。您有一个由 6 个相同大小的 VLF 组成的日志文件。为简单起见,假设 1 VLF = 1MB,因此总日志文件为 6MB。您想将其缩小到 3MB。您执行事务日志备份,这会使一些 VLF(我们将随机选择 4 个)处于活动状态,其余部分可用于重用:
1____2____3____4_XX_5____6____
Run Code Online (Sandbox Code Playgroud)
现在,您执行目标大小为 3MB 的收缩。Shrink 只能在最后删除未使用的 VLF,但不能一直降低到 3MB 的目标大小:
1____2____3____4_XX_
Run Code Online (Sandbox Code Playgroud)
你不能再缩小了,因为 VLF 4 正在使用中,这就是事情的运作方式。在截断之前,您需要 VLF 4 可供重用。因此,您进行了第二次事务日志备份——备份了 VLF 4,并且 VLF 1 成为活动的 VLF:
1_XX_2____3____4____
Run Code Online (Sandbox Code Playgroud)
现在,您可以执行第二次收缩,并将事务日志缩小到 3MB 的目标大小:
1_XX_2____3____
Run Code Online (Sandbox Code Playgroud)