【发布时间】:2013-03-01 14:24:29
【问题描述】:
我正处于研究阶段,试图在现有的小型项目中采用 2012 年数据库项目。我是 C# 开发人员,而不是 DBA,所以我对最佳实践不是特别精通。我已经在google和stackoverflow上搜索了几个小时,但我仍然不知道如何正确处理一些关键的部署场景。
1) 在多个开发周期的过程中,我如何管理我的数据库的多个版本?如果我的数据库 v3 上有一个客户端,并且我想将它们升级到 v8,我该如何管理?我们目前为我们产品的每个版本管理手工制作的架构和数据迁移脚本。我们是否还需要单独执行此操作,或者新范式中是否有支持或替代此操作的东西?
2) 如果架构以需要移动数据的方式发生变化,那么最好的处理方法是什么?我假设 Pre-Deployment 脚本中进行了一些工作以保留数据,然后 Post-Deploy 脚本将其放回正确的位置。是这样还是有更好的办法?
3) 任何其他关于如何最好地使用这些新技术的建议或指导也非常感谢!
更新:自从我最初提出这个问题以来,我对这个问题的理解有了一些提高,虽然我想出了一个可行的解决方案,但它并不是我所希望的解决方案。这是我的问题的重新措辞:
我遇到的问题纯粹是数据相关的。如果我的应用程序版本 1 上有一个客户端,并且我想将它们升级到我的应用程序版本 5,那么如果他们的数据库没有数据,我这样做不会有任何问题。我只是让 SSDT 智能地比较模式并一次性迁移数据库。不幸的是,客户有数据,所以事情没那么简单。从我的应用程序的版本 1 到版本 2 到版本 3(等等)的模式更改都会影响数据。我目前管理数据的策略要求我为每个版本升级(1 到 2、2 到 3 等)维护一个脚本。这使我无法从应用程序的版本 1 直接转到版本 5,因为我没有数据迁移脚本可以直接转到那里。为每个客户端创建自定义升级脚本或管理升级脚本以从每个版本到每个更高版本的前景呈指数级难以管理。我所希望的是,SSDT 启用了某种策略,使管理事物的数据方面变得更容易,甚至可能与事物的模式方面一样容易。我最近使用 SSDT 的经历并没有让我对这种策略存在任何希望,但我很想找出不同的答案。
【问题讨论】:
-
您可能会发现模式比较功能对于保持模式同步很有用。 Link 1 和链接 2 msdn.microsoft.com/en-us/library/aa833202(v=vs.80).aspx
-
模式比较工具很棒,但它对数据没有任何帮助。某些架构更改需要自定义工作来保存和迁移数据,而架构比较工具不支持这一点。我认为这就是存在部署前和部署后脚本的原因,以帮助处理这种性质的事情。
-
您可能需要考虑项目的快照,以便您可以按特定顺序发布它们。快照 v1、v2、v3 等。按顺序应用每个,这样当您拥有发布包时就不会丢失任何东西。您可以查询数据库中的表以找出“当前”版本,并通过批处理或 powershell 脚本从 v+1 开始。部署后脚本可以处理在您的表中设置该版本。
-
希望我早点发现这个问题!据我所知,数据是 SSDT 被遗忘的故事,这很奇怪,因为这就是数据库的全部意义所在。有时感觉他们喜欢在演示中看起来很华丽的东西:(
标签: sql visual-studio-2012 sqlcmd database-project sql-server-data-tools