对大型生产数据库进行模式更改的最佳实践

时间:2012-05-05 15:00:34

标签: database sql-server-2008 database-schema mysql-management

我们偶尔必须对基于mysql或mssql的生产数据库进行架构更改。我对这通常是一种严酷的考验感到震惊。技术人员使用相应平台的浏览器(例如Sql server Management Studio)进行更改,并观察此过程中的几个问题:

  1. 对数据库的每次更改都需要相当长的时间,导致技术人员不满意,数据库停机时间过长。
  2. 技术人员不知道数据库引擎在进行更改时所取得的进展。问题出现是因为技术人员在过程中间不知道在尝试进行更改时是否存在某种故障,或者只是需要很长时间才能执行此更改。
  3. 有更好的方法吗?通过命令行脚本更改表是最佳实践吗?有没有办法在执行架构更改时监控进度?

    谢谢,

    埃利奥特

2 个答案:

答案 0 :(得分:1)

Elliott,从您的评论来看,您似乎正在使用客户支持而非支持开发人员对数据库进行更改。如果我错了,请纠正我。如果你正在使用支持开发人员,他们应该运行脚本来进行更改,这始终是最好的方法。通过阅读你的问题看起来你的数据库看起来像拥有多少记录。要获取脚本,您可以使用Microsoft VisualStudio DB版。它将比较数据库源项目和要将其部署到的数据库。然后,您可以查看创建的脚本并在服务器上运行它。

关于我所说的长时间变化的问题取决于你正在做的数据量和架构变化。为了防止长时间停机,您需要找到对客户影响最小的时间,并在此期间进行。如果您是24x7系统,则必须安排停机时间。 此外,尝试研究您的更改模式。是否有可能将所有更改分组到单个重新关联,以便减少停机时间。另外,看看你为什么要进行这么多数据库更改,你可以在设计中做些什么来减轻变化。对于前者每次进行架构更改时,可能会重新构建索引。可能是您可以在架构更改期间禁用索引。完成架构更改,然后使用db作业计划索引重建

关于监控模式更改的问题我不认为有任何可视指示器说明了这么多已完成的内容。你只需要等待命令完成。

答案 1 :(得分:1)

实际上,您可以进行架构更改并使数据库保持在线生产。 1. alter table添加新列并设置默认值为null 2.创建一个SP来更新一小块块数据中的值,如10K 3.使用正确的默认值

更改表格