【问题标题】:SQL server multiple databases with same schemaSQL Server 具有相同架构的多个数据库
【发布时间】:2013-08-31 18:35:34
【问题描述】:

我有一个跨多个 SQL Azure 数据库分片的解决方案。这些数据库都具有完全相同的数据模式,我从其中一个生成了 edmx。

在变更管理方面,如何维护多个数据库的架构? 一个模式中的任何更改都必须自动应用于所有其他数据库。有什么我想念的吗?我查看了数据同步,但它似乎正在解决另一个问题。就我而言,架构完全相同,存储的数据不同。

【问题讨论】:

  • 我没有在 Azure 中使用过它,但在以前的生活中,我充分利用了 Red-Gate Multi-Script 和 SQLFarms Combine 等工具来将更改部署到共享一个公共架构的许多数据库.
  • 多脚本适用于 Azure。
  • 如果您想以编程方式执行此操作,除了使用 Aaron 建议的工具之外,您可以查看 Python 的 Django 迁移 - docs.djangoproject.com/en/dev/topics/migrations 或 Java 的休眠 docs.jboss.org/hibernate/orm/3.3/reference/en/html/…
  • 我遇到了同样的问题,我想听听您决定使用什么解决方案。我正在使用本地数据库作为 mastervisual studio 数据库项目,与 azure 进行数据库比较,本地获取脚本并使用 c# 将其推送到我所有的 azure db。又快又脏,这不是我想要的
  • 嗨 Archlight - 您可能对以下答案中提到的部署管理器工具感兴趣 stackoverflow.com/questions/18551548/…

标签: sql sql-server-2008 azure-sql-database


【解决方案1】:

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

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

第 1 步:更新数据库 Project 的架构更改。

第 2 步:使用 MSBuild 并通过将其中一个数据库设置为 Target 来生成部署脚本。

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

【讨论】:

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

如果您一直使用实体框架迁移来更改数据库结构,那么您也许可以使用下面的方法。这在一定程度上取决于与 EF 应用程序相关的多个数据库的使用方式。

或者您可以使用 EF 迁移到 generate a script,您可以在每台服务器上手动运行。

如果您对自动化流程感兴趣,不妨看看 Red Gate 的Deployment Manager(完全披露我为 Red Gate 工作)。

这使您可以获取数据库并从 Visual Studio 或 SSMS 将其转换为可以部署到多个服务器和环境的包。最多可免费使用 5 个项目和 5 个服务器的入门版,它可以部署到 Azure。它也可以部署 .NET Web 应用程序,但您可以只将它用于 DB。

这对于确保环境中的所有服务器上都具有相同的数据库架构以及根据任何应用程序更改通过 test/staging/prod 传播数据库更改非常有用。您还可以将其与源代码控制和 CI 系统集成,以自动化从开发到生产的数据库更改

【讨论】:

    【解决方案3】:

    有一个名为 Airbyte 的工具,它用于在各种数据库服务器之间同步(计划/自动)和复制一个数据库实例(完整数据库或仅选择)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多