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

Nia*_*ton 7 database sql-server deployment

我们的项目有大约20个开发人员,但我们的应用程序相对较少使用数据库.我们有大约5个数据库的集合,所有这些数据库都非常小,每个数据库的表少于20个,其中没有数百个行或任何大的数据库.

关于如何随着时间的推移管理数据库的演变,我们有两个选项:

  • 某种工具.目前,我们正在使用Visual Studio数据库项目,其中包含模式的当前定义,并查看参考数据库以生成diff脚本.然后,我们使用此diff脚本使参考数据库保持最新.
  • 使用版本脚本从基线构建数据库.脚本手动放置在源代码管理中.将数据从旧列/表移动到新数据的任何数据迁移都将成为这些脚本的一部分.在某个地方会有一个版本记录在DB中,升级会运行DB版本和当前版本之间的所有脚本.

第二个选项似乎被广泛使用,我在这里找到了一个深入的讨论:http://odetocode.com/blogs/scott/archive/2008/01/31/versioning-databases-the-baseline.aspx

我们目前遇到的问题是我们无法访问我们的生产数据库.这意味着要创建一个发布包,我们必须将Production的备份还原到另一个位置,针对该引用数据库生成差异并将脚本提供给生产数据库团队.因此,我们的生产发布与我们的其他环境不同.

这使得运行版本化脚本的想法很吸引人,因为我们在所有环境中使用相同的脚本,并且在部署中没有临时工作(例如,手动恢复prod到参考DB).但鉴于我们有这么小规模的数据库情况,我觉得我们几乎不可能成为数据库工具的困难案例.我们想要的是尽可能简单易懂的东西.

RedGate套件之类的工具是否适用于这种情况,或者我们应该使用版本化脚本吗?成本并不是一个问题,它更多的是创建一个成功的坑,维护和部署数据库是尽可能基本和自动化.

Den*_*rdy 3

根据我的经验,它总是不仅仅是架构更改。如果您将一列分成两部分,或者将一列转移到单独的表中,或者进行其他类似的操作,则需要迁移架构和数据。

没有工具或脚本允许您自动迁移实际数据。最多您会得到模式的差异,您的开发人员可能会发现它作为数据库版本迁移脚本的提醒/检查列表很有用(在单个事务中完成创建/更改/删除和插入/更新/删除的序列) 。