您应该如何从源代码控制构建数据库?
在SO社区Wiki上已经进行了一些讨论,即是否应该对数据库对象进行版本控制。但是,关于创建数据库对象的构建自动化过程的最佳实践,我还没有看到太多讨论。 对于我的团队来说,这一直是一个有争议的讨论点,尤其是因为在评估自动化数据库部署方法的收益和风险时,开发人员和DBA通常具有不同的目标,方法和关注点。 我想听听SO社区的一些想法,这些想法在现实世界中是有效的。 我意识到哪种做法真正最好是有些主观的,但是我认为就什么工作进行很好的对话可能对许多人有帮助。 这是我对本主题关注领域的一些预告问题。这些并不是确定的清单,而是帮助人们了解我在寻找什么的起点。 测试和生产环境都应该从源代码控制构建吗? 两者都应该使用自动化来构建-还是应该通过从稳定的最终测试环境中复制对象来构建产品? 您如何处理部署脚本中测试和生产环境之间的潜在差异? 您如何测试部署脚本能否像测试中那样有效地针对生产工作? 哪些类型的对象应进行版本控制? 只是代码(过程,包,触发器,java等)? 索引? 约束? 表定义? 表更改脚本?(例如ALTER脚本) 一切? 哪些类型的对象不应该进行版本控制? 顺序? 补助金? 用户帐号? 在SCM存储库中应如何组织数据库对象? 您如何处理一次性脚本,例如转换脚本或ALTER脚本? 您如何处理从数据库中退出的对象? 谁应该负责将对象从开发提升到测试级别? 您如何协调来自多个开发人员的更改? 您如何处理多个系统使用的数据库对象的分支? 可以合理地对此过程进行哪些例外(如果有)? 安全问题? 数据是否涉及身份识别问题? 不能完全自动化的脚本? 您如何使流程具有弹性和可执行性? 给开发人员报错? 遇到意外的环境问题? 为了灾难恢复? 您如何使决策者相信DB-SCM的优势确实证明了成本合理? 传闻? 行业研究? 行业最佳实践建议? 呼吁公认的当局? 成本效益分析? 在此模型中,谁应该“拥有”数据库对象? 开发人员? DBA? 数据分析师? 超过一个?