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

使数据库中的数据为只读,但允许更改架构

  •  1
  • mwolfe02  · 技术社区  · 16 年前

    这是对一个问题的澄清 earlier question 我问。这与那个问题完全不同,我认为它可以独立存在。

    我每半年创建一次生产数据库的快照。然后,用户可以通过从前端GUI切换后端数据库来查看历史数据。因为它是历史数据,所以必须保持只读。

    但是,有时会将新字段添加到当前数据库中的表中。如果前端希望出现这些字段,这可能会导致问题。我们的解决方案是动态添加字段,如果字段是必需的,则将其设置为null或适当的默认值。这意味着数据库不能设置为只读,因为这将阻止表结构的更改。为了解决这个问题,我们给所有用户 数据读取器 db_denydatawriter 数据库管理 角色。

    所有这些都非常有效,我们没有遇到任何问题。但是,数据仍然可以由dbo(即me)更改。我担心的是,有一天我会意外地对这些历史数据进行更改(可能没有意识到),从而损害其完整性。

    尝试的解决方案:

    • 我尝试将db_denydatawriter的角色分配给dbo,但失败了(请参阅 aforementioned question ).

    • 该问题的另一个建议是在更改模式时关闭和打开快照的只读状态。这是可行的,只是每次快照模式更改都会导致大约两分钟的延迟。我们通常不会对模式进行太多更改,但如果可能的话,我希望避免这种情况。

    任何其他想法都将不胜感激。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Michael Wheeler    16 年前

    当新字段添加到生产数据库并且应用程序发生更改时(这很可能是在维护窗口期间完成的),为什么不运行一个脚本来更新快照呢。

        2
  •  0
  •   Piotr Rodak    16 年前

    我同意迈克尔的观点。您可能有在生产数据库上运行的发布脚本。针对快照运行脚本的DDL部分,并将其更改回只读模式。