【问题标题】:Change the Database recovery model to simple while is in production在生产中将数据库恢复模型更改为简单
【发布时间】:2018-05-02 17:53:53
【问题描述】:

我有一个生产中的数据库,我想运行一个 ETL 进程来删除数据库的一些记录(2 亿),但是由于每次我尝试运行 ETL 时数据库都处于 FULL 模型,所以日志文件会退出空间。

为了避免我想把recovery模式改成simple,在我做完清理表的过程后,我再把recovery放到full model。

当然,在开始这个过程之前,我会备份数据库。

这样做有什么问题,有什么建议吗??

在这方面的任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-delete recoverymodel


    【解决方案1】:

    来回切换恢复模式是个坏主意。很容易使数据库进入不良状态,并且很容易使您的数据库备份无效。

    第一个选择是获得更多存储空间,以便随着日志的增长,您不会用完空间。有时说起来容易做起来难,因此您的下一个选择是在 ETL 运行时以设定的时间间隔运行事务日志备份。这将允许提交事务并防止日志文件被填满。这将增加磁盘 I/O,因此性能可能会受到影响。第三个选项(在这些情况下我更喜欢并经常使用的选项)是在恢复设置为SIMPLE 的暂存数据库中执行我的所有 ETL 处理。 ETL 的最后一步是使用已清理的数据简单地更新生产数据库。

    【讨论】:

    • 你认为更新会更快吗谢谢删除?
    • 有很多因素需要考虑,例如磁盘性能、键和索引。这当然是可能的,但如果不了解有关表结构和 ETL 过程的更多详细信息,就很难说。
    【解决方案2】:

    这与您更新数据的频率以及是否需要恢复到特定时间点有关。例如,如果您的数据库每天填充一次 ETL 批处理,那么您最好将数据库保持在 SIMPLE 恢复模型中,并在批处理完成后执行完整备份或差异备份。

    此外,您通常会在 Datawarehouse ETL 流程中执行批量加载,并且由于每个事务都被完全记录,因此完全恢复可能会影响性能。如果您需要时间点恢复,并且选择了 FULL 恢复模式,那么您可能需要考虑在 ETL 过程期间切换到 Bulk-logged 恢复模式,以便将您的批量操作记录到最低限度。 Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多