核对清单数据库架构升级
-
09-06-2019 - |
题
具有升级,数据库架构,使安装一个新版本的软件很多棘手。什么是最好的做法,这样做?
我在寻找一个清单或时间表的行动项目,例如
- 8:30的关闭程序
- 8:45修改架构
- 9:15安装新的应用程序
- 9时30分重新启动db
等等,显示出如何最大限度地减少风险和停机时间。问题比如
- 衬里的升级,如果事与愿违
- 减少影响到现有的应用程序
- "热"的更新的数据库运行
- 促进从开发测试的生产服务器
特别的兴趣。
解决方案
我有很多的经验。我的申请被高度迭代和架构变化,经常发生。我做了一个生产释放出大约每隔2至3星期后,有50至100项目清除了从我FogBugz列表的每一个。每个版本,我们已经做了在过去几年有所需的架构变化,以支持新的特点。
这里的关键是实践中的变化,几次测试中的环境之前,实际上使他们在生活的服务器。
我一直部署清单,文件复制的模板然后重编辑的每一个版本有任何普通的。
我有两个脚本我上运行数据库、一个用于架构改变,一个用于编程能力(程序,意见等)。更改脚本是通过手工编码,一个与过程编写脚本经置。改脚本时运行的一切都是关闭(你必须选择一次惹恼了少量用户对于此),这是执行命令的命令,手动,只是在情况有什么奇怪的。最常见的问题,我已经成为增加独特的约束,出现故障,由于重复行。
当准备的集成试验周期,我通过我的清单上的一个测试服务器,如果该服务器的生产。然后,除此之外,我去拿一个实际的生产数据库的副本(这是一个很好的时间来交换你的异地备份),和我的脚本上恢复当地版本(这也是良好的,因为它证明了我最新的备份的声音)。我杀了很多鸟类的一个石头在这里。
所以这是4个数据库的共:
- 开发:所有的改变必须在更改脚本,从来没有与工作室。
- 测试:集成试验发生在这里
- 复制的生产:最后一分钟部署的做法
- 生产
你真的,真的需要得到它的权利,当你这样做的生产。退出模式的改变是困难的。
尽修补程序,我将永远只能修补程序的程序,从来没有架构,除非它是一个非常孤立的变化以及关键的业务。
其他提示
我猜你已经考虑的读的斯科特*安布勒?http://www.agiledata.org/essays/databaseRefactoring.html
这是一个主题,我只是说有关的工作。主要的问题是,除非数据库迁移是为您处理很好的框架,如轨道及其迁移的脚本,然后将它留给你。
目前的方式,我们这样做已显而易见的缺点,和我打开的其他建议。
- 有一个模式转储静态数据,需要有保持最新,并版本控制。
- 每次你做的架构变化的行动,改变,建立,等等。转储到一个文件,并把它扔在的版本控制。
- 确保更新的原sql数据库。
- 这样做时推动确保你或者你的脚本用的sql的文件的数据库。
- 清理旧sql文件版本控制,因为他们变老。
这并不是最佳的,是真的不打算作为一个"备用"数据库。它只是使推动容易,并保持开发人员在同一页上。有可能是一些很酷的东西你可能设置capistrano尽自动化应用程序的sql的文件的数据库。
Db具体版本的控制将是非常棒。有可能是什么,这是否和如果有没有可能是应该的。
如果斯科特*安布勒的纸张开你的食欲我可以推荐他的书与普拉莫德J Sadolage称为'重构数据库- http://www.ambysoft.com/books/refactoringDatabases.html
还有很多有用的咨询意见和信息的敏捷的数据库组在雅虎 http://tech.groups.yahoo.com/group/agileDatabases/
两个注:
不用说...所以我会说这两次。
验证是否有一个有效的备份。
验证是否有一个有效的备份。@mk。检查了 杰夫的博客 在数据库版本控制(如果您已经没有)