SQL Server 备份文件大小

Joh*_* L. 3 sql-server backup

我定期使用 SQL Server UI(任务 --> 备份)备份数据库,备份类型:完整。每次备份时,.bak文件都会变得臃肿。如果我删除.bak文件并进行备份,则会.bak创建50 MB文件而不是我删除的 500 MB 文件。

这背后的原因是什么?

Ram*_*chi 8

您将备份附加到同一个文件中,因此它实际上是在累积备份。每次从“任务”->“备份”触发备份时,您都需要指定一个新名称。

使用维护计划,因为它有每个备份文件的时间戳,或者使用 Ola Hellengren 的解决方案。

https://ola.hallengren.com/


Joh*_* N. 6

备份数据库涉及相当多的参数,即使您让 SQL Server Management Studio 在您的帮助下完成备份,或者您安排维护计划为您完成备份也是如此。

如果您为每个完整数据库备份使用相同的文件名,最简单的解决方案是验证是否设置了以下参数:

INIT
Run Code Online (Sandbox Code Playgroud)

您的备份命令可能类似于:

BACKUP DATABASE [Your_DataBase] 
TO DRIVE = 'G:\Backup\Full\Your_Database_Full.bak' 
WITH NO_COMPRESSION, 
RETAINDAYS = 7, 
NOFORMAT,
NOINIT,
NAME = 'Name you gave your backup',
SKIP, 
NOREWIND,
NOUNLOAD,
STATS = 10,
CHECKSUM
Run Code Online (Sandbox Code Playgroud)

默认BACKUP命令将使用该NOINIT选项,其定义如下:

NOINIT | INIT
控制备份操作是附加到还是覆盖备份介质上的现有备份集。默认是附加到媒体上的最新备份集 (NOINIT)。

NOINIT
表示将备份集附加到指定的媒体集,保留现有的备份集。如果为媒体集定义了媒体密码,则必须提供密码。NOINIT 是默认值。

INIT
指定应覆盖所有备份集,但保留媒体标头。如果指定了 INIT,则在条件允许的情况下,将覆盖该设备上的任何现有备份集。

参考:备份 (Transact-SQL)

解决方案编号 1

每次使用相同的文件名执行备份时NOINITINIT将参数更改为将初始化备份文件,并将覆盖备份文件的内容。

您的备份命令应该如下所示:

BACKUP DATABASE [Your_DataBase] 
TO DRIVE = 'G:\Backup\Full\Your_Database_Full.bak' 
WITH NO_COMPRESSION, 
RETAINDAYS = 7, 
NOFORMAT,
INIT, -- << Important change
NAME = 'Name you gave your backup',
SKIP, 
NOREWIND,
NOUNLOAD,
STATS = 10,
CHECKSUM
Run Code Online (Sandbox Code Playgroud)

解决方案编号 2

正如@RamakantDadhichi 所指出的,通过添加日期和时间将文件名更改为唯一可以帮助防止在一个文件中进行多个备份。