SQL备份占用了我所有的硬盘空间

SQL备份占用了我所有的硬盘空间

我每天都要备份我的 SQL 数据库。我刚买了一台新服务器,打算将数据库备份转移到新服务器上并恢复它。我们的数据库不像大多数公司那么大,只有 40 GB。我们去复制备份时,发现存储备份的硬盘已满,备份大小为 900GB。我在不同的 SQL 版本上使用过同样的任务,数据库备份从未像这样增长。

  • 运行 Windows Server 2008 R2
  • 运行 SQL Server 2008 R2 Ent
  • 64 位

我不确定我是否编写了错误的脚本,下面是它的代码:

将数据库 [DATABASE] 备份到磁盘 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK',使用 NOFORMAT、NOINIT、NAME = N'DATABASE'、SKIP、NOREWIND、NOUNLOAD、STATS = 10 GO 将 @backupSetId 声明为 int 从 msdb..backupset 中选择 @backupSetId = position,其中 database_name=N'DATABASE' 和 backup_set_id=(从 msdb..backupset 中选择 max(backup_set_id),其中 database_name=N'DATABASE' ),如果 @backupSetId 为空,则开始 raiserror(N'验证失败。未找到数据库 ''DATABASE'' 的备份信息。',16,1) 结束 从磁盘 = N'C:\Program Files\Microsoft SQL 恢复 VERIFYONLY服务器\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK'WITH FILE = @backupSetId,NOUNLOAD,NOREWIND GO

(我添加了代码标签,但由于某种原因,它们没有被采用)

有人能告诉我为什么我的数据库备份不断增长吗?提前感谢你的帮助。

答案1

NOINIT = 表示将备份集附加到指定的媒体集,保留现有的备份集。

正在附加您的备份。如果您不希望备份继续增长,则需要使用 INIT。

http://technet.microsoft.com/en-us/library/ms186865.aspx

答案2

每次备份时它都会附加到其末尾。

答案3

正如 DanBig 和 joeqwerty 所说,您的备份将附加到同一个文件中。如果您想保留版本而不附加或覆盖,请创建单独的日期文件。例如:

Declare @DBname varchar(255),
        @SQL nvarchar(max), 
        @today nvarchar(50),
        @servername nvarchar(50)

set @today = convert(nvarchar,GETDATE(),12)  
set @servername = REPLACE(@@SERVERNAME,'\','-')
set @DBName = 'YourDB'

set @SQL='BACKUP DATABASE [' + @DBName + '] TO  DISK = N''c:\some backup path\' + @servername + '-' + @DBName + '-' + @today + '.bak'' WITH FORMAT, INIT,  NAME = N''Full ' + @DBName + ' Database Backup'', SKIP, NOREWIND, NOUNLOAD,  STATS = 10'
EXEC SP_EXECUTESQL @SQL

相关内容