对于我的 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
我的假设是,如果数据库中活动很少或没有活动,那么差异就不会增加(或者不会增加太多)。
但是,当我运行上述差异备份(几乎没有活动)时,我看到差异备份每次增加几兆。为什么会这样增加?
谢谢
答案1
有东西正在改变你的数据库!
索引重建或碎片整理等操作会导致页面更改。回滚的更改可能会更改页面,因此它们也算在内。
此外,差异备份被视为“模糊的”,因此备份中会有事务日志数据,这是一致性所必需的。
Paul Randal 写了一篇非常酷的脚本不久前,它会告诉您自上次完整备份以来有多少范围发生了变化,因此您可以使用它来计算差异会有多大。
此外,您应该能够使用此脚本告诉您数据库中的哪些页面发生了变化。这可能有助于您解决数据变化之谜。
答案2
请记住,差异备份不同于增量备份。例如,如果您有一个 100MB 的数据库,并且进行了 5MB 的更改,则每个差异备份至少为 5MB。使用增量备份,如果您有一个 100MB 的数据库,并且在星期一进行了 5MB 的更改,而在星期二没有更改,那么您将获得 100MB 的完整备份、星期一的 5MB 增量备份和星期二的小于 1MB 的小备份。
对于差异,如果您有 100MB 的数据库,并且在接下来的 4 天内分别进行了 5、1、3 和 5MB 的更改,那么您将拥有 5、6、9 和 14MB 的差异备份。
答案3
你是完全确定数据库上根本没有任何活动?也许您可以运行探查器来查看是否有任何您没有预料到的事情发生,同时检查维护计划或计划任务中是否有任何可能修改数据的内容。
话虽如此……我意识到我没有真正的答案。我对一个特定数据库(约 6GB)进行的每日差异总是在周末增加,即使理论上没有人登录使用该数据库的应用程序。我没有费心去研究它,因为我知道该服务器上有一些服务偶尔会根据需要读取/写入该数据库,尽管频率不高。
答案4
我(基本上是一名 Java 开发人员)面临同样的问题,我的实时数据库为 7.5 GB,其每天的差异备份为 1.5 GB。(实际上,我们进行 1 小时的差异备份)当我运行 randy 的脚本半天时(即午餐时间,即一个完整工作日的一半)我得到了以下输出:
总变化百分比 125658 17169 13.66
我确信这是一个老应用程序,很少有人使用它,但对于这样一个使用较少的应用程序,它怎么可能显示 17169 个已更改的范围,这导致:17169 * 64k => 1098.816 MB(接近 1GB 的差异)。请分享您对此的想法...我该如何进一步调试?我的意思是我如何进一步减少范围以获得较小的差异。