【问题标题】:Maintaining consistency when using temp backup tables使用临时备份表时保持一致性
【发布时间】:2010-09-15 07:04:03
【问题描述】:

这与What’s your #1 way to be careful with a live database 的接受答案有关?

假设您为备份目的创建了一个临时表并在原始表中进行了更改。这些更改破坏了系统,您想要恢复备份。与此同时,原始表中的一些其他记录也发生了变化(它是一个实时数据库)。现在如果您恢复备份,系统将处于不一致的状态。

解决这个问题的最佳方法是什么

【问题讨论】:

    标签: database


    【解决方案1】:

    我不认为这是可取的,在将表投入生产之前我会更加努力地测试,但假设它无论如何都会发生,你有两个选择:

    1.- 创建一个 ON INSERT 触发器,用插入到新表中的行更新临时备份表,按摩数据以适应旧表

    2.- 像这样找出数据的差异

    SELECT * FROM faultyTable 
    EXCEPT 
    SELECT * FROM backupTable
    

    当然,您必须将要选择的列调整为公共子集。 EXCEPT 有时也称为 MINUS。

    之后,您可以将差异插入备份表并恢复组合。表的关系越多,这就越难……根据用于恢复表的方式,您可能会删除相关数据,因此您也必须选择它。

    【讨论】:

      【解决方案2】:

      我经常这样做

      BEGIN TRANSACTION
      
      -- SQL CODE
      

      最后,如果一切正常,请执行我的 SELECT 之类的操作

      COMMIT 
      

      否则

      ROLLBACK
      

      【讨论】:

      • 除非您提交,否则您如何在“实时”设置中测试系统
      【解决方案3】:

      您的数据库可能会提供此功能。例如在 Oracle 中:

      Export (Your options) consistent = y
      

      当然,在生产在线环境中进行一致的备份会对系统造成性能损失。

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 2013-06-04
        • 2014-12-07
        • 2010-10-06
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多