如何更新多个 SQL Server 数据库架构
Posted
技术标签:
【中文标题】如何更新多个 SQL Server 数据库架构【英文标题】:How can I update multiple SQL Server database schemas 【发布时间】:2011-02-07 01:13:43 【问题描述】:这是我的困境,
我正在使用 ASP.net MVC3 和 SQL Server 开发一些 SaaS。
会有多家公司使用该软件,每家公司都有多个用户。为了确保数据不会意外地从一家公司到另一家公司可见,我将数据库设置为每家公司的单独数据库,然后网络服务器处理其他所有事情:UI、逻辑等。
我已经可以预见到一个问题,我需要在它变成一个真正的问题之前决定如何最好地处理它。拥有这些多个数据库,如果今年一切顺利敲木头,我们可能会在年底前获得 500 个客户。出于显而易见的原因,手动同步模式是不可能的。 VS2010 有一个不错的 SQL 比较脚本工具,会很有帮助,但我应该如何确保所有数据库都是最新版本?
问题 2
系统的设计方式非常模块化,因此客户将能够根据他们的特定需求添加小部件和东西,从而将新表添加到特定的数据库中。所以理论上每个数据库都会有所不同。我认为处理此问题的最佳方法是丢弃所有更改脚本,以便您拥有
Core.sql
Widget-Map.sql
Widget-HR.sql
etc..
我的这种思路是正确的,还是有更实际的方法来解决这种情况?
我研究了 Red-Gate SQL 比较,我喜欢它,但它在多数据库情况下仍然没有帮助。
那么在这种情况下,我应该创建自己的工具来更新架构吗?
如果有任何建议、提示、链接。使这项任务不那么艰巨将不胜感激。
非常感谢您的任何帮助,
我已经阅读了一些资料, Migrations for Java
http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
【问题讨论】:
根据 Mitch 的建议,我正在研究数据库项目,所以我会阅读 blogs.msdn.com/b/jenss/archive/2010/08/21/… 并更新我的进度 Gert Drapers 博客有很多 GDR R2 信息:blogs.msdn.com/b/gertd @MitchWheat 感谢您提供出色的链接。我刚刚设置了 Team Foundation 服务器,目前正在将我的数据库模式转换为数据库项目,我认为这将使这变得非常容易。再次感谢 【参考方案1】:在进行结构升级的 ORM 之外,方法分解为:
与一些被认为正确的数据库进行比较。我个人认为这是有风险的,因为我更愿意将升级与代码的部署联系起来,并以某种方式将数据库规范包含在代码中。这是我个人的喜好。
升级脚本。曾经是最流行的,似乎随着 ORM 的占有率越来越高而消失了。基本上,对于任何特定版本,您都有一个从头开始构建的“安装”脚本,以及处理所有增量“From_x.y.z_to_a.b.c”之类的第二组脚本。优点:简单易懂。缺点:代码加倍,17 的第 7 个脚本失败时极其严重的 PITA。
基于字典或架构的升级。可能是我自己之外最不受欢迎的,我知道没有人这样做:(好吧,也许这有点夸张。php Doctrine 有这样的东西。想法是一些工具将模式与现有数据库进行比较,并使模式成为当前的。优点:单一架构文件(或多个文件),代码不加倍,保证升级的最佳方式将在最短的时间内生成您期望的数据库。缺点:(几乎)没有人这样做,缺乏工具。
我有一个工具可以做到这一点,应该可以在 MS SQL 上工作,但我现在只在 Postgres 上进行测试,所以我不会发布链接,因为我不想浪费你的时间。
【讨论】:
Visula Studio GDR 数据库项目与 (3) 类似,但其优势在于架构受源代码控制。 GDR 项目可能很繁琐,但运行良好。 @Mitch 我想我应该指出你的字典/模式会咳咳,当然是在源代码控制下:)【参考方案2】:理论上,您可以在源代码控制中为每个不同的架构版本创建一个单独的分支,当您需要更新它们时,可以使用源代码控制中的 SQL Compare Pro 命令行方向进行更新。这将要求您使用 SQL Source Control 以 SQL Compare Pro 可以识别的源代码可控格式保存架构。
如果您需要任何帮助来尝试或设置,请联系 support@red-gate.com。
【讨论】:
感谢您的回复,我计划使用 RedGate 的一些工具,但是,研究新的 2010 数据库项目,它允许我在 Visual Studio 内部拥有一个源代码控制的数据库架构,而无需太多大惊小怪。以上是关于如何更新多个 SQL Server 数据库架构的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?
如何在一个数据库命中中将多个插入或更新推送到一起 - 对于多数据库(SQL Server、Oracle、MySQL 和 PostgreSQL)应用程序