背景
我们的组有4个SQL Server数据库:
- 生产环境
- 用户验收测试环境(UAT)
- 测试环境
- 开发环境
我在开发环境工作。当需要推广我所做的对象(表、视图、函数、存储过程)时,我会向我的经理提出请求,她会将它们推广到测试环境。经过测试后,她会向管理员提交请求,将它们推广到用户验收测试环境(UAT)。在成功的用户测试后,同一管理员会将它们推广到生产环境。
问题
整个过程有几个不方便之处:
- 每个人都必须手动跟踪他们的更改。如果我更新、添加或删除任何对象,我需要跟踪它们,以便我的推广请求包含我所做的所有事情。理论上,如果我漏掉了什么,测试或用户验收测试应该能够发现,但这并不确定,而且这也浪费了测试人员的时间。
- 我进行的许多更改都是迭代的,并且在GUI中完成的,这意味着没有记录我所做的更改,只有最终结果(至少就我所知)。
- 我们正在构建数据集市的早期阶段,因此大部分更改(按数量计算)都是微小的事情:更改列的数据类型,随着我们明确表用途而修改表名,调整函数和存储过程等。
问题
人们已经做这种工作数十年了,所以我想象中肯定有更好的方法来管理这个过程。我希望能够运行两个数据库之间的差异比较,查看结构的不同之处,使用该差异生成更改脚本,并将其用作我的推广请求。这可行吗?如果不行,是否有其他组织此过程的方式?
值得一提的是,我们是100%的Microsoft店,刚刚更新到SQL Server 2008,因此该套件中提供的任何工具都可以使用。
我应该澄清一下,我不一定在寻找差异工具。如果这是同步环境的最佳方法,那么没问题,但如果有更好的方法,我会寻找它。
Ruby on Rails中的迁移就非常好地实现了我想要的功能。语法简单易懂,所有更改都自动且默认情况下都有很好的文档记录,确定需要运行哪些迁移几乎是轻而易举的。我希望SQL Server中也有类似的东西。
我的理想解决方案是:1)易于使用;2)难以出错。Rails迁移两者都具备,但在SQL Server上所做的一切都不具备这些特点。