教程:使用 DMS 将 SQL Server 迁移到 Azure SQL 托管实例

可以使用 Azure Data Studio 中的 Azure 数据库迁移服务(DMS)和 Azure SQL 迁移扩展将数据库从 SQL Server 实例迁移到Azure SQL 托管实例,并缩短停机时间。

对于需要进行一些手动配置的数据库迁移方法,请参阅迁移指南:将 SQL Server 迁移到 Azure SQL 托管实例

提示

在 Azure 数据库迁移服务中,可以脱机或联机迁移数据库。 使用脱机迁移时,应用程序停机时间从迁移开始时算起。 若要将停机时间限制为迁移后直接转换到新环境所需的时间,请使用联机迁移。 建议测试脱机迁移,以确定停机时间是否可接受。 如果无法接受预期的停机时间,请进行联机迁移。

在本教程中,你将使用 Azure Data Studio 和数据库迁移服务 (DMS),将 AdventureWorks2022 数据库从 SQL Server 的本地实例迁移到 Azure SQL 托管实例的实例。 本教程使用联机迁移模式,在此模式下,仅在迁移结束时的短暂转换期间会出现应用程序停机。

本教程介绍如何执行下列操作:

  • 在 Azure Data Studio 中启动“迁移到 Azure SQL”向导
  • 对源 SQL Server 数据库运行评估
  • 从源 SQL Server 实例收集性能数据
  • 获得最适合工作负载的 Azure SQL 托管实例 SKU 的建议
  • 指定源 SQL Server 实例、备份位置和 Azure SQL 托管实例目标实例的详细信息
  • 创建新的 Azure 数据库迁移服务,并安装自承载集成运行时以访问源服务器和备份
  • 开始迁移并监视迁移的进度
  • 准备就绪后执行迁移直接转换

重要

为迁移做好准备并尽量缩短联机迁移过程的持续时间,以便将实例重新配置或计划内维护造成的中断风险降到最低。 如果发生此类事件,迁移过程将从头开始。 计划内维护有 36 小时的宽限期,在此期限内,在重新开始迁移过程之前,将会保留目标 Azure SQL 托管实例配置或维护内容。

先决条件

要完成本教程,需要:

  • 下载并安装 Azure Data Studio

  • 从 Azure Data Studio 市场安装适用于 Azure Data Studio 的 Azure SQL 迁移扩展

  • 具有一个已分配到以下内置角色之一的 Azure 帐户:

    • Azure SQL 托管实例目标实例的参与者角色,以及将服务器消息块 (SMB) 网络共享中的数据库备份文件上传到的存储帐户的参与者角色
    • 包含 Azure SQL 托管实例目标实例或 Azure 存储帐户的 Azure 资源组的读取者角色
    • Azure 订阅的所有者或参与者角色(如果要创建新的数据库迁移服务实例,则此角色是必需的)

    如果不使用这些内置角色之一,则你可以分配自定义角色

    重要

    仅当配置迁移步骤时才需要 Azure 帐户。 进行评估或者在 Azure Data Studio 的迁移向导中查看 Azure 建议时不需要 Azure 帐户。

  • 创建 Azure SQL 托管实例的目标实例。

  • 确保用于连接源 SQL Server 的登录名是 sysadmin 服务器角色或具有 权限的成员。

  • 提供一个 SMB 网络共享、Azure 存储帐户文件共享或 Azure 存储帐户 Blob 容器,其中包含完整数据库备份文件和后续事务日志备份文件。 数据库迁移服务在数据库迁移期间使用备份位置。

    • 适用于 Azure Data Studio 的 Azure SQL 迁移扩展不会进行数据库备份,也不会代表你启动任何数据库备份。 实际上,该服务使用现有数据库备份文件进行迁移。
    • 如果数据库备份文件已在 SMB 网络共享中,则请创建一个 Azure 存储帐户,该帐户允许 DMS 服务上传数据库备份文件并将其用于迁移数据库。 确保在创建数据库迁移服务实例的同一区域中创建 Azure 存储帐户。
    • 可将每个备份写入单独的备份文件或多个备份文件。 不支持将多个备份(例如完整日志和事务日志)追加到单个备份媒体。
    • 可以提供压缩的备份来减少遇到与迁移大型备份相关的潜在问题的可能性。
  • 确保运行源 SQL Server 实例的服务帐户对包含数据库备份文件的 SMB 网络共享具有读取和写入权限。

  • 如果要迁移受透明数据加密 (TDE) 保护的数据库,则在迁移数据之前,必须将源 SQL Server 实例中的证书迁移到 Azure SQL 目标。 有关迁移已启用 TDE 的数据库的详细信息,请参阅教程:将已启用 TDE 的数据库(预览版)迁移到 Azure Data Studio 中的 Azure SQL

    如果数据库包含受 Always Encrypted 保护的敏感数据,则迁移过程会自动将 Always Encrypted 密钥迁移到 Azure SQL 目标。

  • 如果数据库备份在网络文件共享中,请提供一台可在其上安装自承载集成运行时的计算机,以访问和迁移数据库备份。 迁移向导提供下载链接和身份验证密钥,用于下载和安装自承载集成运行时。

    在为迁移做准备时,请确保计划安装自承载集成运行时的计算机启用了以下出站防火墙规则和域名:

    域名 出站端口 说明
    公有云:{datafactory}.{region}.datafactory.azure.net
    *.frontend.clouddatahub.net

    Azure 政府版:{datafactory}.{region}.datafactory.azure.us

    由世纪互联运营的 Microsoft Azure:{datafactory}.{region}.datafactory.azure.cn
    443 自承载集成运行时连接到数据迁移服务时需要此端口。

    对于在公有云中新建的数据工厂,可以在自承载集成运行时密钥中找到完全限定的域名 (FQDN),其格式为 {datafactory}.{region}.datafactory.azure.net

    对于现有数据工厂,如果在自承载集成密钥中未看到 FQDN,请改用 *.frontend.clouddatahub.net
    download.microsoft.com 443 自承载集成运行时下载更新时需要此端口。 如果已禁用自动更新,则可以跳过对此域的配置。
    .core.windows.net 443 由连接到 Azure 存储帐户的自承载集成运行时用于从网络共享上传数据库备份。

    提示

    如果数据库备份文件已在 Azure 存储帐户中提供,则在迁移过程中不需要自承载集成运行时。

  • 如果使用自承载集成运行时,请确保安装了运行时的计算机可以连接到源 SQL Server 实例和备份文件所在的网络文件共享。

  • 启用出站端口 445 以允许访问网络文件共享。 有关详细信息,请参阅有关使用自承载集成运行时的建议

  • 如果你是首次使用数据库迁移服务,则请确保在订阅中注册了 Microsoft.DataMigration 资源提供程序。 按照步骤注册资源提供程序

在 Azure Data Studio 中启动“迁移到 Azure SQL”向导

若要打开“迁移到 Azure SQL”向导,请执行以下操作:

  1. 在 Azure Data Studio 中,转到“连接”。 选择并连接到 SQL Server 的本地实例。 还可以连接到 Azure 虚拟机上的 SQL Server。

  2. 右键单击服务器连接并选择“管理”。

  3. 在服务器菜单中的“常规”下,选择“ Azure SQL 迁移”。

  4. 在“Azure SQL 迁移”仪表板中,选择“迁移到 Azure SQL”打开迁移向导。

    启动“迁移到 Azure SQL”向导的屏幕截图。

  5. 在向导的第一页上,启动新会话或恢复以前保存的会话。

运行数据库评估、收集性能数据并获得 Azure 建议

  1. 选择要评估的数据库,然后选择“下一步”

  2. 选择“Azure SQL 托管实例”作为目标。

    评估确认的屏幕截图。

  3. 选择“查看/选择”以查看评估结果。

  4. 在评估结果中选择数据库,然后查看评估报告,确保没有任何问题。

    数据库评估详细信息的屏幕截图。

    1. 选择“获取 Azure 建议”打开建议窗格。

    2. 选择“立即收集性能数据”。 在本地计算机上选择一个文件夹用于存储性能日志,然后选择“开始”。

      Azure Data Studio 现在将收集性能数据,直到你停止收集、按向导中的“下一步”按钮或关闭 Azure Data Studio。

      约 10 分钟后,Azure Data Studio 将指示有适用于 Azure SQL 托管实例的建议。 你也可以在初始 10 分钟后按“刷新建议”链接,以使用收集的额外数据刷新和优化建议。 如果你的使用模式会随时变化,则扩展的评估特别有用。

    3. 在选定的“Azure SQL 托管实例”目标中,选择“查看详细信息”打开详细的 SKU 建议报告:

    4. 在“查看 Azure SQL 托管实例建议”中查看建议。 若要保存建议的副本,请选中“保存建议报告”复选框。

  5. 选择“关闭”以关闭建议窗格。

  6. 选择“下一步”继续在向导中迁移数据库。

配置迁移设置

  1. 从相应的下拉列表中选择订阅、位置和资源组来指定 Azure SQL 托管实例,然后选择“下一步”

  2. 选择“联机迁移”作为迁移模式。

    注意

    在联机迁移模式下,在目标 Azure SQL 托管实例上持续还原数据库备份时,源 SQL Server 数据库可以用于读取和写入活动。 应用程序停机时间限制为迁移结束时的直接转换持续时间。

  3. 选择数据库备份的位置。 数据库备份可以位于本地网络共享或 Azure 存储 Blob 容器中。

    注意

    如果数据库备份是在本地网络共享中提供的,DMS 会要求你在向导的下一步安装自承载集成运行时。 如果需要一个自承载集成运行时来访问源数据库备份,请检查备份集的有效性并将其上传到 Azure 存储帐户。 如果数据库备份已在 Azure 存储 Blob 容器中,则无需安装自承载集成运行时。

对于位于网络共享中的备份,请输入或选择以下信息:

字段 说明
源凭据 - 用户名 用于连接到源 SQL Server 实例并验证备份文件的凭据(Windows / SQL身份验证)。
源凭据 - 密码 用于连接到源 SQL Server 实例并验证备份文件的凭据(Windows / SQL身份验证)。
包含备份的网络共享位置 包含完整备份文件和事务日志备份文件的网络共享位置。 在迁移过程中,将自动忽略网络共享中不属于有效备份集的所有无效文件或备份文件。
拥有网络共享位置读取权限的 Windows 用户帐户 拥有网络共享读取权限以检索备份文件的 Windows 凭据(用户名)。
密码 拥有网络共享读取权限以检索备份文件的 Windows 凭据(密码)。
目标数据库名称 可以在迁移过程中修改目标数据库名称。
存储帐户详细信息 备份文件上传到的资源组和存储帐户。 无需创建容器。 在上传过程中,DMS 会自动在指定的存储帐户中创建 Blob 容器。

对于存储在 Azure 存储 Blob 容器中的备份,请输入或选择以下信息:

字段 说明
目标数据库名称 如果要在迁移过程中更改目标上的数据库名称,可以修改目标数据库名称。
存储帐户详细信息 备份文件所在的资源组、存储帐户和容器。

重要

如果启用了环回检查功能,并且源 SQL Server 和文件共享位于同一台计算机上,则源将无法使用 FQDN 访问文件共享。 若要解决此问题,请按照此处的说明禁用环回检查功能

适用于 Azure Data Studio 的 Azure SQL 迁移扩展不再要求对 Azure 存储帐户网络设置进行特定配置即可将 SQL Server 数据库迁移到 Azure。 但是,根据数据库备份位置和所需的存储帐户网络设置,需要执行几个步骤来确保资源可以访问 Azure 存储帐户。 有关各种迁移方案和网络配置,请参阅下表:

方案 SMB 网络共享 Azure 存储帐户容器
已从所有网络启用 无额外步骤 无额外步骤
已从所选虚拟网络和 IP 地址启用 请参阅 1a 请参阅 2a
已从所选虚拟网络和 IP 地址 + 专用终结点启用 请参阅 1b 请参阅 2b

1a - Azure Blob 存储网络配置

如果在 Azure VM 上安装了自承载集成运行时 (SHIR),请参阅 1b - Azure Blob 存储网络配置部分。 如果在本地网络上安装了自承载集成运行时 (SHIR),则需要在 Azure 存储帐户中添加托管计算机的客户端 IP 地址,如下所示:

显示存储帐户网络详细信息的屏幕截图。

若要应用此特定配置,请从 SHIR 计算机连接到 Azure 门户,打开 Azure 存储帐户配置,选择“网络”,然后选中“添加客户端 IP 地址”复选框。 选择“保存”以使更改永久生效。 有关剩余步骤,请参阅 2a - Azure Blob 存储网络配置(专用终结点)部分。

1b - Azure Blob 存储网络配置

如果你的 SHIR 托管在 Azure VM 上,则需要将 VM 的虚拟网络添加到 Azure 存储帐户,因为 VM 具有无法添加到 IP 地址范围部分的非公共 IP 地址。

显示存储帐户网络防火墙配置的屏幕截图。

若要应用此特定配置,请找到 Azure 存储帐户,从“数据存储”面板中选择“网络”,然后选中“添加现有虚拟网络”复选框。 此时会打开一个新面板。 选择托管集成运行时的 Azure VM 的订阅、虚拟网络和子网。 可在 Azure VM 的“概述”页面上找到此信息。 子网可能会显示“需要服务终结点”,如果是这样,则请选择“启用”。 一切准备就绪后,请保存更新。 有关剩余的所需步骤,请参阅 2a - Azure Blob 存储网络配置(专用终结点)部分。

2a - Azure Blob 存储网络配置(专用终结点)

如果你的备份直接放置在 Azure 存储容器中,则不需要执行上述任何步骤,因为没有集成运行时与 Azure 存储帐户通信。 但是,我们仍需要确保目标 SQL Server 实例能够与 Azure 存储帐户通信,以便从容器还原备份。 若要应用此特定配置,请按照 1b - Azure Blob 存储网络配置部分中的说明进行操作,在填写“添加现有虚拟网络”弹出窗口时指定目标 SQL 实例虚拟网络。

2b - Azure Blob 存储网络配置(专用终结点)

如果在 Azure 存储帐户上设置了专用终结点,则请按照 2a - Azure Blob 存储网络配置(专用终结点)部分中所述的步骤进行操作。 但是,需要选择专用终结点的子网,而不只是目标 SQL Server 子网。 确保专用终结点托管在与目标 SQL Server 实例相同的 VNet 中。 如果不是,请使用 Azure 存储帐户配置部分中的过程创建另一个专用终结点。

创建数据库迁移服务实例

创建新的 Azure 数据库迁移服务或重用之前创建的现有服务。

如果以前你使用 Azure 门户创建了数据库迁移服务实例,则无法在 Azure Data Studio 的迁移向导中重用该实例。 仅当实例是使用 Azure Data Studio 创建的时,才能重用该实例。

使用数据库迁移服务的现有实例

若要使用数据库迁移服务的现有实例,请执行以下操作:

  1. 在“资源组”中,选择包含现有数据库迁移服务实例的资源组。

  2. 在“Azure 数据库迁移服务”中,选择位于选定资源组中的现有数据库迁移服务实例。

  3. 选择“下一步”。

创建数据库迁移服务的新实例

若要创建数据库迁移服务的新实例,请执行以下操作:

  1. 在“资源组”中,创建一个新资源组以包含数据库迁移服务的新实例。

  2. 在“Azure 数据库迁移服务”下选择“新建”。

  3. 在“创建 Azure 数据库迁移服务”中,输入数据库迁移服务实例的名称,然后选择“创建”。

成功创建 DMS 后,“安装集成运行时”处会提供详细信息供你安装集成运行时。

  1. 选择“下载并安装集成运行时”链接,在 Web 浏览器中打开下载链接。 下载集成运行时,然后将其安装在满足连接到源 SQL Server 实例的先决条件的计算机上。

    安装完成后,Microsoft Integration Runtime Configuration Manager 会自动打开以开始注册过程。

  2. 在“身份验证密钥”表中,复制向导中提供的一个身份验证密钥并将其粘贴到 Azure Data Studio 中。 如果该身份验证密钥有效,则 Integration Runtime Configuration Manager 中会显示一个绿色勾选图标。 绿色勾选标记指示可以继续注册。

    注册自承载集成运行时后,关闭 Microsoft Integration Runtime Configuration Manager。

    注意

    有关如何使用自承载集成运行时的详细信息,请参阅创建和配置自承载集成运行时

  3. 在 Azure Data Studio 的“创建 Azure 数据库迁移服务”中,选择“测试连接”以验证新建的数据库迁移服务实例是否已连接到新注册的自承载集成运行时。

    测试连接集成运行时的屏幕截图。

  4. 返回 Azure Data Studio 中的迁移向导。

开始数据库迁移

查看创建的配置,然后选择“开始迁移”以开始数据库迁移。

监视数据库迁移

  1. 在“数据库迁移状态”中,可以跟踪正在进行的迁移、已完成的迁移和失败的迁移(如果有)。

    监视迁移仪表板的屏幕截图。

  2. 选择“正在进行的数据库迁移”以查看处于活动状态的迁移。

    若要获取有关特定迁移的详细信息,请选择数据库名称。

    迁移详细信息窗格显示了备份文件及其相应状态:

    状态 说明
    已到达 备份文件已到达源备份位置并已经过验证。
    正在上传 集成运行时正在将备份文件上传到 Azure 存储帐户。
    已上传 备份文件已上传到 Azure 存储帐户。
    正在还原 服务正在将备份文件还原到 Azure SQL 托管实例。
    已还原 已在 Azure SQL 托管实例中成功还原备份文件。
    已取消 迁移过程已取消。
    已忽略 已忽略备份文件,因为它不属于有效的数据库备份链。

    备份还原详细信息的屏幕截图。

完成迁移直接转换

本教程的最后一个步骤是完成迁移切换,以确保 Azure SQL 托管实例中已迁移的数据库可供使用。 此过程是唯一需要使连接到数据库的应用程序停机的步骤,因此,需要与业务或应用程序利益干系人一起认真规划切换持续时间。

若要完成直接转换:

  1. 停止传入源数据库的所有事务。
  2. 更改应用程序配置,使之指向 Azure SQL 托管实例中的目标数据库。
  3. 在指定的备份位置中,执行源数据库的最终结尾日志备份
  4. 使源数据库处于只读模式。 这样一来,用户可以从数据库读取数据,但不能修改数据库。
  5. 确保所有数据库备份在监视详细信息页中都显示为“还原”状态。
  6. 在监视详细信息页中选择“完成直接转换”。

在切换过程中,迁移状态将从“正在进行”更改为“正在完成” 。 完成切换过程后,迁移状态将更改为“成功”,表示数据库迁移成功,且迁移的数据库可供使用。

重要

交接后,具有业务关键服务层的 SQL 托管实例只能用比具有常规用途服务层的 SQL 托管实例更长的时间才能使用,因为必须为 Always On 高可用性组设定三个辅助副本的种子。 此操作持续时间取决于数据的大小,有关详细信息,请参阅管理操作持续时间

限制

重要

使用 Azure SQL 扩展进行联机迁移时使用与日志重播服务(LRS)相同的技术,并具有相同的限制。 在将数据库迁移到业务关键服务层之前,请考虑这些限制,这些限制不适用于常规用途服务层。

使用 Azure Data Studio 的 Azure SQL 扩展迁移到 Azure SQL 托管实例具有以下限制:

  • 如果迁移单一数据库,则数据库备份必须放置在数据库文件夹内的平面文件结构中(包括容器根文件夹),并且文件夹不能嵌套,因为不支持嵌套文件夹。
  • 如果使用同一个 Azure Blob 存储容器迁移多个数据库,则必须将不同数据库的备份文件置于容器内的单独文件夹中。
  • 不支持在目标 Azure SQL 托管实例中使用 DMS 覆盖现有数据库。
  • DMS 不支持在目标上配置高可用性和灾难恢复来匹配源拓扑。
  • 不支持下列服务器对象:
    • SQL Server 代理作业
    • 凭据
    • SSIS 包
    • 服务器审核
  • 不能使用从 Azure 数据工厂创建的现有自承载集成运行时通过 DMS 进行数据库迁移。 自承载集成运行时最初在 Azure Data Studio 中使用 Azure SQL 迁移扩展创建,可以重复用于更多数据库迁移。
  • 单个 LRS 作业(由 DMS 创建)最多可以运行 30 天。 当此期限到期时,作业将自动取消,因此目标数据库会自动删除。
  • 如果收到以下错误:Memory-optimized filegroup must be empty in order to be restored on General Purpose tier of SQL Database Managed Instance,则此问题是设计造成的。 Azure SQL 托管实例的常规用途层级上不支持内存中 OLTP。 若要继续迁移,一种方法是升级到支持内存中 OLTP 的业务关键层。 另一种方法是确保源数据库在 Azure SQL 托管实例为常规用途时不使用 Hekaton。