减少SQL备份的大小?

时间:2009-08-20 09:53:09

标签: sql sql-server

我正在使用SQL Express 2005并且每晚都备份所有数据库。我注意到一个DB变得越来越大。我看着数据库,看不出为什么它变得如此之大!我想知道它是否与日志文件有关?

寻找有关如何在其中没有获得那么多数据的情况下找到它变得如此之大的提示 - 以及如何优化/缩小尺寸?

6 个答案:

答案 0 :(得分:16)

要检查的几件事情:

  • 是“简单”恢复模式下的数据库吗?如果是这样,它将产生更少的事务日志条目,并且备份将更小。建议用于开发 - 但不用于生产

  • 如果处于“FULL”恢复模式 - 您是否定期进行事务日志备份?这应该限制事务日志的增长,从而减少整体备份大小

  • 你最近在上面运行了DBCC SHRINKDATABASE(yourdatabasename)吗?这可能会有所帮助

  • 您的数据库中是否有任何日志/日志记录表随着时间的推移而填满?你能删除其中一些条目吗?

您可以通过转到对象资源管理器找到数据库的恢复模型,右键单击数据库,选择“属性”,然后在对话框中选择“选项”选项卡:

alt text

马克

答案 1 :(得分:10)

如果备份不断增长和增长,我遇到了同样的问题。当然,这不是一个“问题”,这是通过设计实现的 - 您只是进行备份'设置',只需扩展直到占用所有可用空间。

为避免这种情况,您必须更改覆盖选项。在SQL管理工作室中,右键单击数据库,TASKS - BACKUP,然后在备份窗口中,您将看到它默认为“常规”页面。将其更改为“选项”,您将获得一组不同的选择。

顶部的默认选项是“附加到现有媒体集”。这使您的备份无限期增加。将其更改为“覆盖所有现有备份集”,备份将始终只有一个完整备份,即最新备份。

(如果您有一个SQL脚本执行此操作,请将'NOINIT'转换为'INIT')

注意:这意味着备份只会是最新的更改 - 如果你在三天前犯了一个错误,但你只有昨晚的备份,那么你就会被填满。如果您的备份机制每天将.bak文件复制到另一个位置,则只能使用此方法,因此您可以返回前几天中的任何一个文件。

答案 2 :(得分:3)

听起来您正在运行FULL恢复模型,并且由于未进行任何事务日志备份,事务日志会不断增长。

为了纠正这个问题,您需要:

我建议您阅读以下Microsoft参考资料,以确保您正确管理数据库环境。

Recovery Models and Transaction Log Management

进一步阅读:How to stop the transaction log of a SQL Server database from growing unexpectedly

答案 3 :(得分:0)

保持数据库较小的一个提示是在设计时,使用您可以使用的最小数据类型。

例如你可能有一个状态表,你真的需要索引是一个int,当smallint或tinyint会这样做吗?

<强> Darknight

答案 4 :(得分:0)

当您为数据库执行每日完整备份时,当然会随着时间的推移而变得如此之大。 所以你必须为自己制定一个计划。就这样 第1天:全部 /第二天:差别 /第3天:差别 /第4天:差别 /第5天:差异

然后重新开始。

当你恢复你的数据库时,如果你想恢复FULL你可以轻松地完成它,但是当你需要恢复DIFF版本时,你先用“NO-recovery”备份第一个FULL然后DIFF你需要,然后你将安全地恢复你的数据。

答案 5 :(得分:0)

7zip您的备份文件以进行存档。我最近备份了一个178MB .bak文件的数据库。将其归档到.7z文件后只有16MB。 http://www.7-zip.org/

如果您需要一个可以比7zip更高效,更快速地处理更大文件大小的归档工具,我建议您查看LZ4归档。我已将它用于存档文件备份多年,没有任何问题: http://lz4.github.io/lz4/