管理数据库迁移:脚本 vs 工具

8
我们的项目有大约20个开发人员,但我们的应用程序对数据库的使用相对较少。我们有大约5个数据库集合,所有这些集合都非常小,每个集合不到20个表,没有任何包含数百万行或任何大型内容的表。
我们有两种选项来管理数据库随时间的演变:
1.某种工具。目前我们正在使用Visual Studio数据库项目,其中包含模式的当前定义,并查看参考数据库以生成差异脚本。然后,我们使用此差异脚本将参考数据库更新到最新版本。
2.使用版本脚本从基线构建数据库。手动将这些脚本放置在源代码控制中。任何数据迁移以将数据从旧列/表移动到新列/表都将成为这些脚本的一部分。在DB中记录一个版本,并升级将运行DB版本和当前版本之间的所有脚本。
第二个选项似乎被广泛使用,我在这里找到了一个深入的讨论:http://odetocode.com/blogs/scott/archive/2008/01/31/versioning-databases-the-baseline.aspx 我们现在所拥有的问题是我们无法访问我们的生产数据库。这意味着要创建发布包,我们必须将生产环境的备份还原到另一个位置,针对该参考数据库生成差异,并将脚本提供给生产数据库团队。因此,我们发布到生产环境与我们的其他环境不同。
这使得运行版本化脚本的想法很有吸引力,因为我们在所有环境中使用相同的脚本,而且在部署过程中没有临时工作(例如手动恢复prod到参考DB)。但是,考虑到我们具有如此小规模的数据库情况,我觉得我们几乎不可能成为存在的DB工具的困难案例。我们想要的是尽可能简单易懂的东西。
像RedGate套件这样的工具是否适用于这种情况,或者我们应该使用版本脚本?成本并不是太大的问题,更多的是创建一个成功之坑,使维护和部署DB尽可能基本和自动化。
2个回答

4
我是Red Gate公司SQL Compare产品经理,该产品可以生成两个数据库之间的差异脚本。我想让您看看我们的SQL Source Control工具,它将允许您跟踪在开发中进行的模式更改。当涉及到部署时,如果您知道生产环境中使用的模式版本,您可以从源代码控制的版本生成部署脚本。当然,在运行于生产环境之前,您应该始终在测试环境中进行测试。
Scott的文章在迁移脚本方面提出了一个很好的观点,Denis则暗示了更复杂的更改,这些更改无法通过比较工具来预测,因此需要管理和适当使用定制的迁移脚本。下一版本的SQL Compare与SQL Source Control将同时管理您的模式版本和迁移脚本,使您能够得到最佳效果。如果您想看到早期的截图,请发送电子邮件至David dot Atkinson at red-gate dot com。我非常乐意讨论您的需求,以便我们更好地设计该工具。

还有一个很棒的功能是能够在版本之间管理静态数据的方法。这是Red Gate提供或计划提供的吗? - joerage
这不就是把你的静态数据更改 SQL 放在适当的迁移脚本中吗? - David Atkinson
那我可能误解了。我原以为迁移脚本是根据数据库架构的版本历史自动生成的。如果是这样的话,下一步就是管理静态数据并将其包含在迁移脚本中。 - joerage
进一步解释一下我的想法,我希望有一个管理静态数据的地方,这些数据将被保存在源代码控制中。然后工具可以看到两个版本之间的差异并生成一个脚本来更新它。 - joerage
我们已经在某种程度上使用了 SQL Source Control。你试过这个吗?与 SQL Data Compare 结合使用,应该就能接近你所需的功能了。 - David Atkinson

3

根据我的经验,仅仅进行模式更改是不够的。如果你将一列分成两个或将一列移动到另一个表中等操作,你需要迁移模式和数据。

没有工具或脚本可以自动迁移实际数据。最多只能得到模式的差异,这对于开发人员来说可能是有用的,作为数据库版本迁移脚本的提醒/检查列表(在单个事务中执行创建/修改/删除和插入/更新/删除的序列)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接