单一的流程强制了版本控制的实施- 确保被执行的部署脚本在运行时能够正确判断环境状态 —— 按需(在准备执行前)构建(生成)部署脚本的方式确保了它完全了解当前的环境状态。
- 确保部署脚本能够正确处理与合并冲突 —— 在分析过程中使用基线比较,就能够了解变更的原因,并且能够简单地判断是否要将变更进行部署、或是对目标环境进行保护(即忽略该变更)、或是对冲突进行合并。

了解基线的分析- 只为相关的变更生成部署脚本 —— 与应用程序生命周期管理(ALM)工具及变更管理系统(CMS)的结合保证你能够为每个变更分配一个原因,就如同你在基于文件的版本控制系统或任务管理系统中所做的一样。
- 确保部署脚本了解数据库的依赖项 —— 严密的分析与脚本生成算法确保了DDL、DCL和DML等语句能够根据数据库的依赖,以正确的顺序进行执行,包括了跨schema的依赖。
除了这些必需满足的需求之外,还存在着一些别的需求,例如对并行开发的支持、合并分支、与数据库IDE的集成,以及支持由数据建模工具生成的变更等等。无论你选择了哪种方式,都必须验证它是否能够处理这些需求。
结论 对数据库组件的管理有着特殊的需求,因此对自动化流程来说是个极大的挑战。在距今较远的年代里,一年中通常只有几次发布,因此花费大量时间对数据库部署脚本进行手动审查以及维护是常见的、也是情有可原的做法。现如今,随着对敏捷及更快的发布速度的需求不断增长,数据库管理必须成为自动化流程的一部分。无论是编写SQL或XML脚本,或是使用简单的比较与合并工具,一旦在自动化过程中使用,都存在着低效或是高风险的问题。最有效的方式是实现数据库执行变更管理。 
关于作者 Uri Margalit是DBmaestro公司的产品管理主管,Dbmaestro是一家企业级软件开发公司,致力于数据库开发与部署技术。Uri在企业软件与系统管理方面有着15年以上的经验,并且曾在多家处于业界前沿的软件公司中担任过高级产品经理与研发经理的职位。
查看英文原文:The Definitive Guide to Database Version Control 转自 http://www.infoq.com/cn/articles/Database-Version-Control?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global |