代码之家  ›  专栏  ›  技术社区  ›  YodasMyDad

减小SQL备份的大小?

  •  13
  • YodasMyDad  · 技术社区  · 17 年前

    寻找有关如何找出为什么它在没有那么多数据的情况下变得如此之大的提示,以及如何优化/减小大小?

    6 回复  |  直到 16 年前
        1
  •  16
  •   marc_s MisterSmith    17 年前

    有几件事要检查:

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

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

    • 你跑过吗 DBCC SHRINKDATABASE(yourdatabasename) 最近呢?这可能会有所帮助

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

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

    alt text

    马克

        2
  •  9
  •   Michael P    13 年前

    如果是备份不断增长,我也有同样的问题。当然,这不是一个“问题”,这是设计出来的——你只是在制作一个备份“集”,它会简单地扩展,直到所有可用空间都被占用。

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

    顶部的默认选项是“附加到现有媒体集”。这就是使您的备份大小无限增加的原因。将此更改为“覆盖所有现有备份集”,备份将始终仅与一个完整备份(即最新备份)一样大。

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

    小心:这意味着备份只会是最新的更改——如果你三天前犯了一个错误,但你只有昨晚的备份,你就被塞满了。只有当你有一个备份机制,每天将.bak文件复制到另一个位置,这样你就可以回到前几天的任何一个文件时,才使用这种方法。

        3
  •  3
  •   John Sansom    17 年前

    听起来您正在使用完整恢复模式运行,并且由于没有进行事务日志备份,事务日志正在不断增长。

    为了纠正这一点,您需要:

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

    Recovery Models and Transaction Log Management

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

        4
  •  0
  •   Darknight    17 年前

    保持数据库小型化的一个技巧是在设计时,使用可以使用的最小数据类型。

    例如,您可能有一个状态表,当使用small int或tinyint时,您真的需要索引是int吗?

    黑夜

        5
  •  0
  •   Arrabi    16 年前

    当然,当您每天对数据库进行完整备份时,它会随着时间的推移而变得如此之大。 所以你必须为自己制定一个计划。如此 第一天:满 /第二天:差异化 /第四天:差异化 /第五天:差异化

    当你还原数据库时,如果你想还原FULL,你可以很容易地做到,但当你需要还原DIFF版本时,你先备份第一个FULL,然后备份你需要的DIFF,然后你就可以安全地恢复数据了。

        6
  •  0
  •   Chaoix    9 年前

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

    http://lz4.github.io/lz4/