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