对于我的SQL Server 2005备份计划,我想在星期天做完整的工作:
BACKUP DATABASE myDatabase TO DISK = 'D:\Database Backups\myDatabase_full.bak' WITH FORMAT GO
然后,我想在本周剩下的时间里做一个差别:
BACKUP DATABASE myDatabase TO DISK = 'D:\Database Backups\myDatabase_Diff.bak' WITH DIFFERENTIAL GO
我的假设是,如果数据库中几乎没有任何活动,那么差异不会增加(或不会增加太多)。
但是,当我运行上面的差异备份(几乎没有任何活动)时,我看到差异备份每次都会增加megs。 为什么这样增加?
谢谢
有东西正在改变你的数据库!
索引重build或碎片整理等操作会导致页面更改。 回滚的更改可能会更改页面,因此它们也会被计数。
另外,差异备份被认为是“模糊的”,因此在备份中会有事务日志数据,这是为了保持一致性。
Paul Randal写了一个很酷的脚本 ,它会告诉你自上次完整备份以来有多less数据块发生了变化,所以你可以用它来计算你的差异是多大。
另外,你应该可以使用这个脚本来告诉你哪些页面在你的数据库中发生了变化。 这可能会帮助你解决你不断变化的数据之谜。
请记住,差异与增量不一样。 例如,如果您有一个100MB的数据库,并做了5MB的更改,则每个差异备份将至less为5MB。 有了Incremental,如果你有一个100MB的数据库,周一做了5MB的更改,而周二没有变化,你将有100MB的完全备份,星期一增加5MB,星期二有一个小的1MB备份。
对于差异化,如果您有100MB的数据库,并且在接下来的4天内做了5,1,3和5MB的更改,则您将拥有差异备份5,6,9和14MB。
你完全确定这个数据库没有任何活动吗? 也许你可以运行分析器来查看是否有什么事情发生,你也不期待,还可以检查维护计划或计划中的任何可能修改数据的任务。
这说…我意识到我没有一个真正的答案。 即使理论上没有人login到使用数据库的应用程序,我在一个特定数据库(〜6GB)上执行的每日差异总是会在周末增加。 我没有仔细研究过它,因为我知道服务器上有服务偶尔按需读取/写入数据库,虽然很less。
差异备份备份已被“触摸”的8K页。
如果您所做的所有更改都很小,并且在相同的区域,则您将有一个小的备份。 这是不可能的。
如果您不断弄脏相同的页面,则差异备份可能不会增长(也不太可能)
有些东西会弄脏一个页面:
我(基本上是一个Java开发人员)面临同样的问题,我的活动数据库是7.5 GB和差异备份每天1.5 GB。 (事实上,我们采取差异备份1小时)当我运行兰迪的脚本的半天(即在午餐时间,这是一个完整的工作日的一半),我有以下输出:
总变化百分比125658 17169 13.66
我相信这是一个旧的应用程序,很less有人使用这个,但是如何能够显示17169个变化的程度,这是一个较less使用的应用程序:17169 * 64k => 1098.816 MB(差不多有1GB差异)。 请分享你的想法…如何进一步debugging? 我的意思是我怎样才能进一步缩小范围,以获得小差距。