pau*_*ulH 7 sql-server-2008 backup
我刚刚为一个相当大的数据库(1.3 TB)编写了一个备份语句,我一直在使用一个更小的数据库(10 GB + 10 GB 日志文件)对其进行测试。备份写入三个目的地。在测试期间,我注意到当备份运行时,每个备份文件的大小约为 1.2 GB,但是一旦备份过程完成,文件就会缩小到 600 MB 以下。
我有兴趣了解:
这是我正在使用的备份语句:
BACKUP DATABASE @DatabaseName
TO DISK = @backupMedia1,
DISK = @backupMedia2,
DISK = @backupMedia3
WITH COMPRESSION, RETAINDAYS = 0, NOFORMAT, INIT, NOSKIP, NAME = @DatabaseName
Run Code Online (Sandbox Code Playgroud)
这是一个已知问题和预期行为(这是设计使然)。本质上,备份保留了它认为可能需要的空间总量,然后在最后一步缩小。要更改行为,您可以使用跟踪标志 3042 进行试验。来自http://msdn.microsoft.com/en-us/library/bb964719.aspx#Allocation:
对于压缩备份,最终备份文件的大小取决于数据的可压缩程度,这在备份操作完成之前是未知的。因此,默认情况下,在使用压缩备份数据库时,数据库引擎对备份文件使用预分配算法。该算法为备份文件预先分配了数据库大小的预定义百分比。如果在备份操作期间需要更多空间,数据库引擎会增大文件。如果最终大小小于分配的空间,则在备份操作结束时,数据库引擎会将文件缩小到备份的实际最终大小。
要允许备份文件仅根据需要增长以达到其最终大小,请使用跟踪标志 3042。跟踪标志 3042 使备份操作绕过默认备份压缩预分配算法。如果您需要通过仅分配压缩备份所需的实际大小来节省空间,则此跟踪标志很有用。但是,使用此跟踪标志可能会导致轻微的性能损失(可能会增加备份操作的持续时间)。