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

Asp.net SQL Server:将架构更改复制到另一个数据库,asp.net,sql-server,database,sql-server-2012,database-replication,Asp.net,Sql Server,Database,Sql Server 2012,Database Replication,我正在处理ASP.NET Web API中的一个需求,它需要两个相同的数据库 我在同一台服务器上创建了两个相同的数据库。假设一个用于开发,另一个用于测试 我希望将所有模式(如存储过程、视图和表)更改立即从一个数据库复制到另一个数据库 我不担心数据复制,我只需要确保两个数据库具有完全相同的模式定义 我尝试从一个数据库生成一个模式,并定期更新另一个数据库。但现在,我想立即将更改复制到另一个数据库。因此,当我在开发数据库中更新存储过程或视图时,同样的更改也应该立即应用于测试数据库 我请求您告诉我是否有

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

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

我希望将所有模式(如存储过程、视图和表)更改立即从一个数据库复制到另一个数据库

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

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


我请求您告诉我是否有可能,或者是否有其他方法来实现这一点

因为我不喜欢触发器本质上是在我不知情的情况下进行更改,所以我建议使用一个过程来初始化每个数据库。因此,当您在模式中包含一些新代码时,请确保将其也包含在初始化过程中。 复制应始终从此过程开始


您是否对代码和数据库都进行了更改?如果有主从关系,则只需初始化从属数据库。否则,如果是master,您应该保持某种版本控制。

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

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

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

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


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

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

源头控制有各种各样的积极影响,无论如何都应该成为一种习惯。甚至对于您的数据库

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

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

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

另一种解决方案是使用一些第三方工具,如PS+ApexSQL Diff:

或SQL增量


或SQL比较(红门)

我建议您使用Microsoft的特殊解决方案。这将为您的VisualStudio模板添加新类型的项目,并且可以免费使用(也许您已经安装了它)

此类项目将包含所有DB模式和所有过程/函数/触发器

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

要将更改应用到您的第二个DB,有几种不同的方法。您可以使用
.dacpac
文件方法。或者只发布两个配置文件。或者使用源代码比较工具

主要思想是首先对该项目进行更改,然后应用到实际的数据库中。


当然,如果您有build server publish,则此解决方案的一部分可以是构建过程的一部分,您可以轻松地将更改应用于2个数据库。

Hello Sachin,您可以检查对数据库和实例对象的元数据更改执行的DDL触发器。您可以创建一个通用的一个或多个触发器。在这里,我觉得这很像数据库源代码管理,然后使用适当的工具在每个触发器上“部署”它。