SQL服务器多个具有相同架构的数据库

5
我有一个解决方案,它跨越多个SQL Azure数据库进行分片。这些数据库都具有完全相同的数据模式,我从其中一个生成edmx。
如何在更改管理方面维护多个数据库的模式?任何一个模式的更改都必须自动应用于所有其他数据库。我是不是漏了什么?我看过数据同步,但似乎解决了另一个问题。在我的情况下,模式完全相同,存储的数据不同。

2
我没有在Azure上使用过它,但在以前的工作中,我经常使用Red-Gate Multi-Script和SQLFarms Combine等工具来部署对许多共享公共模式的数据库进行更改。 - Aaron Bertrand
多脚本与Azure兼容。 - user529265
如果你想以编程的方式实现这个功能,除了像Aaron建议的使用工具之外,你还可以查看Python中的Django迁移 - https://docs.djangoproject.com/en/dev/topics/migrations/或者Java中的Hibernate http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/toolsetguide.html - chaos
我遇到了同样的问题,我想听听您决定使用什么解决方案。我正在使用本地数据库作为mastervisual studio数据库项目,通过与Azure进行数据库比较并获取脚本,然后使用C#将其推送到所有我的Azure数据库中。快速而肮脏,绝对不是我想要的。 - Archlight
嗨,Archlight - 你可能会对下面回答中提到的部署管理工具感兴趣:https://dev59.com/tnbZa4cB1Zd3GeqPElVv#20741881 - Jon
3个回答

2

可以通过使用SSDT(VS的插件)和自动化部署工具(我使用Final Builder)来实现。

我目前使用SSDT工具创建了原始模式的数据库项目。如果其中一个数据库有任何更改,我会在SSDT中使用模式比较并更新数据库项目。然后按照以下步骤将更改推出到其他数据库。

步骤1:将模式更改更新到数据库项目中。

步骤2:使用MSBuild并设置一个数据库作为目标,生成部署脚本。

步骤3:使用任何自动部署工具在所有数据库上运行生成的脚本。


您还可以使用SqlPackage.exe命令行工具,通过使用在构建SSDT项目时生成的.dacpac文件来部署到每个数据库。好处是它会检查每个数据库的状态,因此,如果其中任何一个与其他数据库不同步,它仍然会确保DB最终处于正确的状态。这是使用MSBulid的不错替代方案。 - Kevin Cunnane

1
如果您总是使用Entity Framework迁移来更改数据库结构,那么您可能可以使用下面的方法。这在一定程度上取决于多个数据库与EF应用程序的关系。 或者您可以使用EF迁移生成脚本,然后在每台服务器上手动运行该脚本。
如果您对自动化流程感兴趣,可以考虑查看Red Gate的Deployment Manager(完全披露,我为Red Gate工作)。
这可以让你将数据库从Visual Studio或SSMS转换为一个包,然后部署到多个服务器和环境中。免费的入门版适用于最多5个项目和5个服务器,并可部署到Azure。它也可以部署.NET Web应用程序,但你也可以只使用它来管理数据库。
它非常适合确保所有服务器上的相同数据库结构,并根据任何应用程序更改在测试/预生产/生产环境中传播数据库更改。你还可以将其与源代码控制和CI系统集成,以自动化开发到生产的数据库更改。

0

有一个叫做Airbyte的工具,它用于在各种数据库服务器之间同步(定期/自动化)和复制一个DB实例(完整数据库或仅选择的部分)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接