我的小组有4个SQL Server数据库:
- 生产
- UAT
- 测试
- 开发
我在开发环境中工作。当需要推广我一直在研究的对象(表格,视图,函数,存储过程)时,我向我的经理提出了一个请求,他向促进测试。经过测试,她向向UAT推销的管理员提交请求。在成功进行用户测试后,同一管理员将推向生产。
的问题
整个过程是尴尬的几个原因。
- 每个人都必须手动跟踪他们的更改。如果我更新,添加,删除任何需要跟踪的对象,以便我的升级请求包含我所做的一切。从理论上讲,如果我错过了测试或UAT应该抓住它的地方,但这不是确定的,反正它浪费了测试者的时间。
- 我做的很多修改都是迭代的,并在GUI中完成,这意味着没有记录我所做的更改,只有最终结果(至少据我所知)。
- 我们正处于构建数据集市的初期阶段,因此大部分更改(至少按计数方式)都是次要的:更改列的数据类型,将表的名称更改为我们结晶就是他们将被用于,调整功能和存储的特效等
问题
人们一直在做这方面的几十年的工作,所以我想有得成为管理流程的更好方式。我会喜欢的是,如果我可以在两个数据库之间运行差异来查看结构如何不同,请使用该差异来生成更改脚本,并将该更改脚本用作我的促销请求。这可能吗?如果没有,是否有其他方法来组织这个过程?
为了记录,我们是100%的微软商店,刚刚将所有内容更新到SQL Server 2008,因此该软件包中提供的任何工具都是公平的游戏。
我应该说明我不一定在寻找diff工具。如果这是同步我们的环境的最佳方式,那么很好,但如果有更好的方式,我正在寻找。
一个我想做得很好的例子是Ruby on Rails中的迁移。死简单的语法,所有更改都会自动记录下来,默认情况下,确定迁移需要运行的几乎非常简单。如果对于SQL Server有类似的东西,我很乐意。
我的理想解决方案是1)容易和2)很难搞砸。 Rails迁移都是;到目前为止,我在SQL Server上所做的一切都不是。
使用脚本来更新数据库和人工跟踪更新脚本自己正是我试图避免的那种情况。 – kubi 2010-05-18 21:56:25
你不'追踪'更新。您将数据库更新视为代码的改进和功能。您将脚本视为源代码树的一部分,并将它们视为源代码,然后将它们作为源代码进行版本控制检查,然后将其作为源代码进行检查等。与避免编写项目.cs文件相同。 – 2010-05-18 22:55:18