将 Azure SQL 数据库 (PaaS) 复制到 IaaS(VM 上的 SQL 服务器)



是否可以使用"创建数据库"[]作为[]的副本来创建作为Azure SQL数据库(PaaS)托管的数据库副本,朝向IaaS(VM上的SQL服务器)?

您能否推荐一种可以限制此类转换停机时间的导入/导出替代方案?

此迁移的原因是 PaaS 模式下跨数据库查询的限制,这使得一次性迁移到较新应用程序版本过程中使用的新数据库变得复杂

答案取决于您是要复制数据库架构、数据还是两者。

正如Jaxidian所说,ApexSQL工具可以完成这项工作,但据我所知,DataDiff只会同步数据库数据,而Diff将同步模式。

以下是描述复制数据库数据过程的文章:

  • https://solutioncenter.apexsql.com/how-to-automatically-synchronize-the-data-in-two-sql-server-databases-on-a-schedule/

如果要同时复制架构和数据,则在此处介绍了该过程:

  • https://solutioncenter.apexsql.com/how-to-automatically-compare-and-synchronize-multiple-databases-on-different-sql-server-instances/

有很多工具可以做到这一点。哪一个最适合您取决于您的需求。但是,Azure 门户中的"复制"功能不会为你完成此操作,但可以作为你最终确定的方法的部分解决方案。

我将做出以下假设:

  • 您拥有始终在线的 24/7 生产负载,因此没有定期/每晚/每周/每月维护窗口
  • 您可以计划维护时段,但希望将其保持在尽可能小的范围内
  • 您可以轻松配置应用程序的连接字符串
  • 您的数据库并不大。千兆字节很好。
  • 您的数据库主要是静态数据(即增量方法比转储和填充方法快得多)

如果我今天/现在这样做,我的方法将是这样的(这只是一种选择):

  1. 使用复制功能制作数据库的副本,我可以将其用作暂存区域/参考点,同时最大限度地减少生产数据库的负载
  2. 从复制的数据库创建备份(bacpac 文件)
  3. 将 bacpac 文件还原到 IaaS 托管的 SQL Server 上,以形成基本部署
  4. 启动维护时段并有效地将数据库置于只读模式,以便数据现在不再更改(无论是关闭应用程序、撤销权限等,都有很多策略可以做到这一点)
  5. 使用诸如ApexSQL Data Diff之类的工具(Redgate和其他工具具有选项)来比较两个数据库之间的数据,并将数据同步到新的IaaS DB。请注意 - 根据您的数据需求,您可能需要调整同步数据的生成脚本。
  6. 验证新数据库现在是否确实是旧数据库的重复副本(ApexSQL Data Diff 也可以对此提供帮助 - 这里有几个选项)
  7. 更改应用上的连接字符串以指向新数据库
  8. 重新打开应用程序并结束维护时段。

因此,当然,如果您执行此类操作,请在维护窗口之前多次练习并多次测试结果。了解所有内容的时间,尤其是生成和还原 bacpac 文件需要多长时间。这是因为您希望在维护时段之前尽可能晚地执行此操作,以最大程度地减少生成和运行您将使用的最终"数据差异"脚本所需的时间。该脚本花费的时间越长,中断的时间就越长。

最新更新