SQL Server:将架构更改复制到另一个数据库

时间:2017-12-28 05:16:28

标签: asp.net sql-server database sql-server-2012 database-replication

我正在研究ASP.NET Web API中的一个需求,它需要两个相同的数据库。

我在同一台服务器上创建了两个相同的数据库。让我们说一个用于开发,另一个用于测试。

我想立即将所有架构(如存储过程,视图和表格)从另一个数据库复制到另一个数据库。

我并不担心数据复制,我只需要确保两个数据库具有完全相同的模式定义。

我尝试从一个数据库生成一个模式,并定期更新另一个数据库。但现在,我想立即将更改复制到其他数据库。因此,当我更新开发数据库中的存储过程或视图时,也应立即对测试数据库应用相同的更改。

我要求您告诉我它是否可能或是否有另一种方法来实现这一目标

5 个答案:

答案 0 :(得分:6)

对我来说,这似乎不是一个好主意。

如果您在破坏系统的开发环境中进行了更改,您也会立即破坏测试环境。这很糟糕。

如果在开发环境中进行代码更改,并更改数据库以支持它,如果立即复制数据库更改,则会使代码和数据库不同步,并且可能会再次破坏测试环境。

更好的方法是使用版本控制系统,将对数据和代码的更改批量处理,并使用手动系统或持续集成将它们一起部署到测试环境。

您可以使用Visual Studio架构比较将数据库结构更改存储为项目的一部分

答案 1 :(得分:4)

不是自动将在一个数据库上完成的更改同步到另一个数据库,而是对数据库使用某种源代码控制,并手动(或自动)将更改部署到这两个环境。

源头控制有各种积极影响,无论如何应该成为一种习惯。即使是你的数据库。

我建议使用Liquibase,因为它是免费的开源软件,非常灵活。

答案 2 :(得分:3)

由于我不太喜欢触发器,因为他们在我不知情的情况下进行了更改,我建议创建一个过程来初始化每个数据库。因此,当您在架构中包含一些新代码时,请确保将其也包含在初始化过程中。 复制应始终使用此过程启动。

您是否对这两个数据库的代码进行了更改?如果您有主从关系,则只需初始化从站DB。否则,如果是master-master,你应该保留某种版本。

答案 3 :(得分:3)

可能的(本机)解决方案之一是启用事务复制(仅用于DDL更改)

enter image description here

您可以选择拥有多个数据库(订阅者),并在将来将订阅者移动到其他服务器(如果需要)。

其他解决方案是使用一些第三方工具,如PS + ApexSQL Diff: https://docs.microsoft.com/en-us/sql/relational-databases/replication/publish/make-schema-changes-on-publication-databases

或SQL Delta

或SQL Compare(红门)

答案 4 :(得分:3)

我建议你使用微软的特殊解决方案。 SQL Server Data Tools for Visual Studio。这将为Visual Studio模板添加新类型的项目,并且可以免费使用(也许您已经安装了它)。

此类项目将包含所有数据库架构和所有过程/函数/触发器。

由于它的项目可能是您解决方案的一部分,您可以在版本控制系统(Git,SNV,TFS等)中完全存储所有数据库历史记录更改。

要将更改应用于您的第二个数据库,有一些方法可以实现。您可以使用.dacpac文件方法。或者只是2个发布个人资料或者使用源比较工具。

主要思想是首先在此项目中进行更改,然后应用于您的实际数据库。

而对于cource,如果你有构建服务器发布,这个解决方案的一部分可以是构建过程的一部分,你可以轻松地将更改应用到2个DB。