背景
我的群组有4个SQL Server数据库:
我在Dev环境中工作。当需要推广我一直在处理的对象(表格,视图,函数,存储过程)时,我向我的经理提出请求,他提升了测试。在测试之后,她向促进UAT的管理员提交请求。用户测试成功后,同一个Admin会升级到Production。
问题
由于一些原因,整个过程很尴尬。
问题
人们几十年来一直在做这种工作,所以我想有一个更好的方法来管理这个过程。我想要的是,如果我可以在两个数据库之间运行差异以查看结构是如何不同的,使用该差异生成更改脚本,使用该更改脚本作为我的促销请求。这可能吗?如果没有,有没有其他方法来组织这个过程?
为了记录,我们是100%的Microsoft商店,刚刚将所有内容更新到SQL Server 2008,因此该软件包中可用的任何工具都是合理的游戏。
我应该澄清一下,我不一定要寻找差异工具。如果这是同步我们环境的最佳方式,那么它很好,但如果有更好的方式我正在寻找它。
做我想要的事情的一个例子是Ruby on Rails中的迁移。死的简单语法,所有更改都会自动记录,默认情况下,确定需要运行的迁移几乎非常简单。我很高兴,如果SQL Server有类似的东西。
我理想的解决方案是1)容易和2)很难搞砸。 Rails迁移都是;到目前为止我在SQL Server上所做的一切都不是。
答案 0 :(得分:3)
在我们的团队中,我们处理数据库更改,如下所示:
这对我们来说效果很好,但是如果几个开发人员大量修改相同的表和视图,仍然需要一些协调。但这并不经常发生。
重点是:
但是,如果您的项目有很多持久的开发分支,这可能效果不佳。
到目前为止还不是一个完美的解决方案,需要采取一些特殊的预防措施。例如,如果根据数据库中存在的数据存在可能失败的更新,则应在生产数据库的副本上测试更新。
与rails迁移相比,我们不会创建脚本来反转更新的更改。但无论如何,这并不总是可行的,至少在数据方面(即使重新创建列,丢弃的列的内容也会丢失)。
答案 1 :(得分:3)
Version Control and your Database
邪恶的一切根源是在UI中进行更改。 SSMS是一个DBA工具,而不是开发人员。开发人员必须使用脚本对数据库模型/架构进行任何类型的更改。对元数据进行版本控制并将升级脚本从每个版本N升级到版本N + 1,这是唯一方式,已被证明可靠地运行。它是SQL Server自身部署的解决方案,用于跟踪元数据更改(资源数据库更改)。
来自VS数据库项目的SQL Compare或vsdbcmd和.dbschema文件等比较工具只是未能采用正确版本化方法的商店的最后一站。他们在简单的场景中工作,但我发现他们在严肃的部署中都失败了。如果工具试图复制数据,那么只是不相信一个工具来更改+ 5TB表...
答案 2 :(得分:2)
RedGate销售SQL Compare,这是生成更改脚本的绝佳工具。
Visual Studio也有支持数据库比较的版本。这之前称为Database Edition。
在我工作的地方,我们很久以前废除了Dev / Test / UAT / Prod分离,转而支持very quick release cycle。如果我们在生产中放置一些东西,我们会很快修复它。我们的客户当然更开心,但在避免企业风险的情况下,这可能很难卖。
答案 3 :(得分:2)
有几种工具可供您使用。一个来自红门,名为SQL Compare。太棒了,强烈推荐。 SQL Compare将允许您在两个数据库之间的模式中执行diff,甚至为您构建sql更改脚本。
请注意,他们现在也在使用SQL Server源代码控制产品。
另一个(如果你是一个视觉工作室商店)是Visual Studio的一部分的架构和数据比较功能(不确定哪个版本)。
答案 4 :(得分:2)
同意SQL Compare是一个了不起的工具。
但是,我们不会像所有其他代码一样对数据库结构或未编写脚本并保存在源代码管理中的对象进行任何更改。然后,您确切地知道您正在推广的版本中包含哪些内容,因为您拥有该特定版本的脚本。
无论如何,通过GUI进行结构更改是一个坏主意。如果你有很多数据,那么至少在SQL Server中使用alter table要慢得多。您只想使用经过测试的脚本来对prod进行更改。
答案 5 :(得分:1)
我同意marapet的意见,其中每个更改都必须编写脚本 但是,您可能遇到的问题是创建,测试和跟踪这些脚本 看看DBSourceTools中使用的修补引擎 http://dbsourcetools.codeplex.com
它专门用于帮助开发人员在源代码控制下获得SQL服务器数据库。
此工具允许您在特定点建立数据库基线,并创建命名版本(v1)
然后,创建部署目标 - 并将命名版本增加到v2
将补丁脚本添加到Patches目录,以获取对架构或数据的任何更改
最后,检查数据库和所有补丁到源代码控制,与devs分发。
这给您带来了一个可重复的过程来测试从v1到v2应用的所有补丁
DBSourceTools还具有帮助您创建这些脚本的功能,即模式比较或脚本数据工具。
完成后,只需将patch目录中的所有文件发送到DBA即可从v1升级到v2。
玩得开心。
答案 6 :(得分:0)
数据库的另一个“Diff”工具:
答案 7 :(得分:0)
答案 8 :(得分:0)
这是我们一直成功使用的工作流程: