具有升级,数据库架构,使安装一个新版本的软件很多棘手。什么是最好的做法,这样做?

我在寻找一个清单或时间表的行动项目,例如

  • 8:30的关闭程序
  • 8:45修改架构
  • 9:15安装新的应用程序
  • 9时30分重新启动db

等等,显示出如何最大限度地减少风险和停机时间。问题比如

  • 衬里的升级,如果事与愿违
  • 减少影响到现有的应用程序
  • "热"的更新的数据库运行
  • 促进从开发测试的生产服务器

特别的兴趣。

有帮助吗?

解决方案

我有很多的经验。我的申请被高度迭代和架构变化,经常发生。我做了一个生产释放出大约每隔2至3星期后,有50至100项目清除了从我FogBugz列表的每一个。每个版本,我们已经做了在过去几年有所需的架构变化,以支持新的特点。

这里的关键是实践中的变化,几次测试中的环境之前,实际上使他们在生活的服务器。

我一直部署清单,文件复制的模板然后重编辑的每一个版本有任何普通的。

我有两个脚本我上运行数据库、一个用于架构改变,一个用于编程能力(程序,意见等)。更改脚本是通过手工编码,一个与过程编写脚本经置。改脚本时运行的一切都是关闭(你必须选择一次惹恼了少量用户对于此),这是执行命令的命令,手动,只是在情况有什么奇怪的。最常见的问题,我已经成为增加独特的约束,出现故障,由于重复行。

当准备的集成试验周期,我通过我的清单上的一个测试服务器,如果该服务器的生产。然后,除此之外,我去拿一个实际的生产数据库的副本(这是一个很好的时间来交换你的异地备份),和我的脚本上恢复当地版本(这也是良好的,因为它证明了我最新的备份的声音)。我杀了很多鸟类的一个石头在这里。

所以这是4个数据库的共:

  1. 开发:所有的改变必须在更改脚本,从来没有与工作室。
  2. 测试:集成试验发生在这里
  3. 复制的生产:最后一分钟部署的做法
  4. 生产

你真的,真的需要得到它的权利,当你这样做的生产。退出模式的改变是困难的。

尽修补程序,我将永远只能修补程序的程序,从来没有架构,除非它是一个非常孤立的变化以及关键的业务。

其他提示

我猜你已经考虑的读的斯科特*安布勒?http://www.agiledata.org/essays/databaseRefactoring.html

这是一个主题,我只是说有关的工作。主要的问题是,除非数据库迁移是为您处理很好的框架,如轨道及其迁移的脚本,然后将它留给你。

目前的方式,我们这样做已显而易见的缺点,和我打开的其他建议。

  1. 有一个模式转储静态数据,需要有保持最新,并版本控制。
  2. 每次你做的架构变化的行动,改变,建立,等等。转储到一个文件,并把它扔在的版本控制。
  3. 确保更新的原sql数据库。
  4. 这样做时推动确保你或者你的脚本用的sql的文件的数据库。
  5. 清理旧sql文件版本控制,因为他们变老。

这并不是最佳的,是真的不打算作为一个"备用"数据库。它只是使推动容易,并保持开发人员在同一页上。有可能是一些很酷的东西你可能设置capistrano尽自动化应用程序的sql的文件的数据库。

Db具体版本的控制将是非常棒。有可能是什么,这是否和如果有没有可能是应该的。

如果斯科特*安布勒的纸张开你的食欲我可以推荐他的书与普拉莫德J Sadolage称为'重构数据库- http://www.ambysoft.com/books/refactoringDatabases.html

还有很多有用的咨询意见和信息的敏捷的数据库组在雅虎 http://tech.groups.yahoo.com/group/agileDatabases/

两个注:

  1. 不用说...所以我会说这两次。
    验证是否有一个有效的备份。
    验证是否有一个有效的备份。

  2. @mk。检查了 杰夫的博客 在数据库版本控制(如果您已经没有)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top