差异备份大小太大

时间:2014-07-28 11:34:59

标签: sql sql-server sql-server-2008-r2

我有一个关于SQL Server 2008 R2 SP2的数据库,我在该db上有这个备份计划:

每个星期五早上我都会得到我的数据库的完整备份,中午我得到差异备份,而本周的其他几天我每天都会得到两次差异备份(早上和中午)。

完整备份大小约为50 GB。我的问题是:第一个差异备份大小约为42 GB。

我在完全备份和差异备份之间没有任何工作,并且没有任何重建索引,重新组织索引或更新统计信息,此数据库上的事务不多。

为了测试,我从db获得完整备份,完成后,我立即从中获得差异备份,但差异备份大小约为42 GB。

即使我检查了DCM页面内容,在完成备份后,此页面也会重置。

我不知道是什么问题。

以下是我的备份命令:

完整备份:

BACKUP DATABASE [test] 
TO DISK = N''filePath\test.bak'' 
WITH NOFORMAT, NOINIT, NAME = 'test', SKIP, REWIND,       
NOUNLOAD,COMPRESSION, STATS = 10

DIFF备份

BACKUP DATABASE [test] 
TO DISK = N''filePath\test.bak'' 
WITH DIFFERENTIAL, NOFORMAT, NAME = 'testdiff', NOINIT, SKIP, REWIND, 
NOUNLOAD, STATS = 10

2 个答案:

答案 0 :(得分:1)

您正在指定NOINIT子句。

  

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

随着新备份的追加,您的文件将继续增长。

此外,您的帖子未提及备份日志的时间和方式。我希望这只是一个遗漏,因为日志也需要备份。

答案 1 :(得分:1)

BACKUP DATABASE [test] TO DISK = N''filePath \ test.bak''with DIFFERENTIAL,NOFORMAT,NAME = testdiff',NOINIT,SKIP,REWIND,NOUNLOAD,STATS = 10

在上面的语句中我使用了NOINIT,当然新备份文件必须附加到上一个文件,但因为我使用新名称作为我的新备份文件,新文件将被创建并且不会附加到以前的档案。

但我的问题已经解决了。因为我在删除它之前和之后都在我的数据库上进行了复制,所以发布保留在SQL实例中,并且我的数据库上有一个活动事务(复制),因此它锁定了许多事务日志,并且我的许多VLF都是活动的。它们是等待发送到订阅服务器。

从我的SQL实例中删除发布后,VLF文件设置为0并且事务日志文件已缩小因此,差异备份文件大小减少了。