2

我正处于构建应用程序的相当初始阶段,该应用程序有望在 1000 台内销售 - 更有可能是数百台,但无论哪种方式都足以引起数据库架构更改的巨大头痛。

我相当受限于 windows / .net / sql server 环境,因为我们的许多客户将自行托管我在他们的 web 服务器中构建的应用程序,并且在他们的服务器上安装的额外位永远不会顺利,而且总是有一个数字投诉/因此而失去业务。所以 sqlalchemy 出来了,因为它在 python 中运行。

我所追求的是一个工具,它可以让我轻松地在应用程序的版本之间迁移。我找到了 migrator.net 并且之前使用过它,但从未投入生产,因为开发团队似乎只每年都在开发它,而不是一个活跃的项目。

有哪些替代方法可用?

更新 我忘了提到我希望能够在持续集成环境中使用它,所以虽然 data dude 和 sql compare 是很好的 gui 工具,但我真的很自动化。

4

4 回答 4

2

Red_Gate 的 SQl 比较有助于保持两个数据库同步。

但是,我认为关键在于将源代码管理中的更改保持在特定版本下。像对待属于某个版本的任何其他代码一样对待您的 sql 代码。永远不要让您的开发人员使用 GUI 进行更改,所有更改都应编写脚本并作为版本的一部分放入源代码控制中。一旦你这样做了,如果有人在版本 1 中并且你想将他们升级到版本 2.3,那么你只需要按顺序运行每个版本的 sripts,你就会在 2.3 版本中拥有一个数据库。

于 2010-09-13T19:36:38.363 回答
2

如果您使用 Visual Studio 2010 Ultimate/Premium Edition 或 Visual Studio Team/Database Edition 2008,您将在 Visual Studio 中找到所需的一切。

您可以比较两个数据库(例如 dev 和 prod)并生成用于修改数据的 SQL 脚本。您可以轻松地从比较中排除某些表或某些列。您还可以检查结果并从脚本生成中排除一些条目。因此,可以轻松灵活地生成可用于部署数据库更改的脚本。您可以从结构中单独比较两个数据库的数据(模式比较)。只需进入“数据”菜单并选择“架构比较”或“数据比较”。您可以阅读http://msdn.microsoft.com/en-us/library/dd193250.aspxhttp://msdn.microsoft.com/en-us/library/dd193261.aspx了解它是如何工作的。因此,您可以使用来自 prod 的数据刷新 dev 中的数据,或者生成将 prod 数据库修改为 dev 数据库的最新版本的脚本。

我开始在 Vinsual Studio Team Edition 2008 中使用此功能,并继续在 Visual Studio 2010 Ultimate 中使用它。这正是我所需要的。在某些情况下,我需要修改一些脚本,但 95% 的工作都是在 Visual Studio 中完成的。

如果你不能 VS2010 Ultimate 或 Premium 并且没有 VS2008 Team 或 Database Editions 我建议你看看 http://www.red-gate.com/ 的一些产品比如http://www.red-gate.com /products/SQL_Compare/index.htm)具有关闭功能。

于 2010-09-13T19:30:55.520 回答
1

将升级脚本添加到您的应用程序。如果仍然没有,请创建一个设置表,在其中存储数据库的当前架构版本。例子:

CREATE TABLE SETTINGS(KEY VARCHAR(255), VALUE VARCHAR(255));
INSERT INTO SETTINGS VALUES('version', '1');

启动应用程序时,查询该表(如果它不存在则没有安装以前的版本),并检查版本。我只会为版本 1 到版本 2 维护单独的升级脚本;版本 2 至 3;3 到 4 以此类推。我不会直接维护版本 1 到 3 左右的升级脚本,通常不需要。升级脚本通常包含 ALTER TABLE 和 CREATE TABLE 语句,但有时也包含 UPDATE。

于 2010-09-13T17:57:37.930 回答
0

SQL Compare 专业版有一个可用于持续集成的命令行。这记录在这里:http: //downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf

理想情况下,您将在源代码管理中维护您的架构以充分利用这一点,您可以使用SQL Source Control来做到这一点。

SQL Compare 可以在两个给定数据库之间迁移,但源代码控制提供了更成熟的开发过程

如果这不能满足您的要求,请对此“答案”发表评论。

于 2010-10-26T20:44:19.130 回答