你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure Data Studio 中将 SQL Server 联机迁移到 Azure 虚拟机上的 SQL Server

使用 Azure Data Studio 中的 Azure SQL 迁移扩展将数据库从 SQL Server 实例迁移到 Azure 虚拟机上的 SQL Server(SQL Server 2016 及更高版本),此过程只会造成极短的停机时间。 有关需要一些手动操作的方法,请参阅将 SQL Server 实例迁移到 Azure 虚拟机上的 SQL Server 一文。

本教程介绍如何在 Azure Data Studio 中使用 Azure 数据库迁移服务,以最短停机时间将 AdventureWorks 数据库从 SQL Server 的本地实例迁移到 Azure 虚拟机上的 SQL Server。

在本教程中,你将了解:

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

本文介绍如何从 SQL Server 联机迁移到 Azure 虚拟机上的 SQL Server。 有关脱机迁移,请参阅在 Azure Data Studio 中使用 DMS 将 SQL Server 脱机迁移到 Azure 虚拟机上的 SQL Server

先决条件

要完成本教程,需要:

  • 下载并安装 Azure Data Studio

  • 从 Azure Data Studio 市场安装 Azure SQL 迁移扩展

  • 有一个 Azure 帐户,该帐户已分配给下列内置角色之一:

    • Azure 虚拟机上目标 SQL Server 的参与者(以及从 SMB 网络共享上传数据库备份文件的存储帐户)。
    • 包含 Azure 虚拟机上的目标 SQL Server 或 Azure 存储帐户的 Azure 资源组的读者角色。
    • Azure 订阅所有者或参与者角色。
    • 如果不使用上述内置角色,也可以分配此文中定义的自定义角色。

    重要

    Azure 帐户仅在配置迁移步骤时需要,迁移向导中的评估或 Azure 建议步骤不需要。

  • 创建作为目标的 Azure 虚拟机上的 SQL Server

    重要

    如果使用现有的 Azure 虚拟机,则应将其注册到完全管理模式下的 SQL IaaS 代理扩展

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

  • 为完整数据库和事务日志备份文件使用以下存储选项之一:

    • SMB 网络共享
    • Azure 存储帐户文件共享或 blob 容器

    重要

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

  • 在迁移数据之前,需要将源 SQL Server 实例证书从受透明数据加密 (TDE) 保护的数据库迁移到目标 Azure 虚拟机 SQL Server。 若要了解详细信息,请参阅将受 TDE 保护的数据库移到其他 SQL Server

    提示

    如果数据库包含受 Always Encrypted 保护的敏感数据,则在 Azure Data Studio 中使用 DMS 的迁移过程会自动将你的 Always Encrypted 密钥迁移到 Azure 虚拟机上的 SQL Server 目标。

  • 如果数据库备份在网络文件共享中,请提供计算机以安装自承载集成运行时,以访问和迁移数据库备份。 迁移向导提供下载链接和身份验证密钥,用于下载和安装自承载集成运行时。 在为迁移做准备时,请确保计划安装自承载集成运行时的计算机启用了以下出站防火墙规则和域名:

    域名 出站端口 说明
    公有云:{datafactory}.{region}.datafactory.azure.net
    *.frontend.clouddatahub.net
    Azure 政府版:{datafactory}.{region}.datafactory.azure.us
    中国:{datafactory}.{region}.datafactory.azure.cn
    443 自承载集成运行时连接到数据迁移服务时需要此端口。
    对于在公有云中新创建的数据工厂,请从自承载集成运行时密钥(格式为 {datafactory}.{region}.datafactory.azure.net)查找 FQDN。 对于旧数据工厂,如果在自承载集成密钥中找不到 FQDN,请改用 *.frontend.clouddatahub.net。
    download.microsoft.com 443 自承载集成运行时下载更新时需要此端口。 如果已禁用自动更新,则可以跳过对此域的配置。
    *.core.windows.net 443 由连接到 Azure 存储帐户的自承载集成运行时使用,用于从网络共享上传数据库备份

    提示

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

  • 使用自承载集成运行时在计算机上安装运行时。 计算机连接到源 SQL Server 实例以及备份文件所在的网络文件共享。 应该启用出站端口 445,以允许访问网络文件共享。 另请参阅使用自承载集成运行时的建议

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

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

  1. 打开 Azure Data Studio 并选择服务器图标以连接到本地 SQL Server(或 Azure 虚拟机上的 SQL Server)。
  2. 在服务器连接上,右键单击并选择“管理”。
  3. 在服务器的主页上,选择“Azure SQL 迁移”扩展。
  4. 在“Azure SQL 迁移”仪表板上,选择“迁移到 Azure SQL”以启动迁移向导。 Launch Migrate to Azure SQL wizard
  5. 在迁移向导的第一个步骤中,将现有或新的 Azure 帐户链接到 Azure Data Studio。

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

  1. 选择要对其运行评估的数据库,然后选择“下一步”。
  2. 选择“Azure 虚拟机上的 SQL Server”作为目标。 Screenshot of assessment confirmation.
  3. 选择“查看/选择”按钮查看数据库评估结果的详细信息,选择要迁移的数据库,然后选择“确定” 。
  4. 选择“获取 Azure 建议”按钮。
  5. 选择“立即收集性能数据”选项并输入要收集的性能日志的路径,然后选择“开始”按钮。
  6. Azure Data Studio 现在将收集性能数据,直到你停止收集、按向导中的“下一步”按钮或关闭 Azure Data Studio。
  7. 10 分钟后,你会看到 Azure SQL VM 的建议配置。 你也可在最初的 10 分钟后按“刷新建议”链接,使用收集到的额外数据刷新建议。
  8. 在上面的“Azure 虚拟机上的 SQL Server”框中,选择“查看详细信息”按钮来了解有关你的建议的更多信息。
  9. 关闭“查看详细信息”框并按“下一步”按钮。

配置迁移设置

  1. 通过从相应的下拉列表中选择订阅、位置、资源组,然后选择“下一步”,指定“Azure 虚拟机上的目标 SQL Server”。
  2. 选择“联机迁移”作为迁移模式。

    注意

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

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

    注意

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

  • 对于网络共享上的备份,请提供源 SQL Server、源备份位置、目标数据库名称和要将备份文件上传到的 Azure 存储帐户的以下详细信息。

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

    字段 说明
    目标数据库名称 如果要在迁移过程中更改目标上的数据库名称,可以修改目标数据库名称。
    存储帐户详细信息 备份文件所在的资源组、存储帐户和容器。
  1. 选择“下一步”继续操作。

    重要

    如果启用了环回检查功能,并且源 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 地址,如下所示:

    Screenshot that shows the storage account network details.

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

    1b - Azure Blob 存储网络配置

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

    Screenshot that shows the storage account network firewall configuration.

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

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

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

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

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

创建 Azure 数据库迁移服务

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

    注意

    如果以前使用 Azure 门户创建了 DMS,则不能在 Azure Data Studio 中提供的迁移向导中重复使用此 DMS。 只能重用以前使用 Azure Data Studio 创建的 DMS。

  2. 在“资源组”处,可以选择现有 DMS 或需要创建新的 DMS。 “Azure 数据库迁移服务”下拉列表列出了所选资源组内的所有现有 DMS。
  3. 若要重用现有 DMS,请从下拉列表中选择它,自承载集成运行时的状态将显示在页面底部。
  4. 若要创建新的 DMS,请选择“新建”。
  5. 在“创建 Azure 数据库迁移服务”屏幕上提供 DMS 的名称,并选择“创建” 。
  6. 成功创建 DMS 后,系统将提供详细信息用于完成“安装集成运行时”的操作。
  7. 选择“下载并安装集成运行时”以在 Web 浏览器中打开下载链接。 完成下载。 在满足先决条件的计算机上安装集成运行时,具体条件是计算机需连接到源 SQL Server 和包含源备份的位置。
  8. 安装完成后,Microsoft Integration Runtime Configuration Manager 将自动启动以开始注册过程。
  9. 复制并粘贴 Azure Data Studio 中向导屏幕提供的身份验证密钥。 如果身份验证密钥有效,Integration Runtime Configuration Manager 中会显示绿色复选图标,指示可以继续注册。
  10. 成功完成自承载集成运行时的注册后,关闭 Microsoft Integration Runtime Configuration Manager 并切换回 Azure Data Studio 中的迁移向导。
  11. 在 Azure Data Studio 的“创建 Azure 数据库迁移服务”屏幕中选择“测试链接”来验证新创建的 DMS 是否连接到新注册的自承载集成运行时,然后选择“完成” 。 Test connection integration runtime
  12. 查看摘要并选择“完成”以启动数据库迁移。

监视迁移

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

    monitor migration dashboard

  2. 选择“正在进行的数据库迁移”来查看正在进行的迁移,选择数据库名称可获取更多详细信息。

  3. “迁移详细信息”页显示备份文件和相应状态:

    状态 说明
    已到达 备份文件已到达源备份位置并进行了验证
    上传 集成运行时当前正在将备份文件上传到 Azure 存储
    已上传 备份文件已上传到 Azure 存储
    Restoring Azure 数据库迁移服务当前正在将备份文件还原到 Azure 虚拟机上的 SQL Server
    还原 备份文件已成功在 Azure 虚拟机的 SQL Server 上还原
    已取消 迁移过程已取消
    忽略 已忽略备份文件,因为它不属于有效的数据库备份链

    online vm backup restore details

完成迁移直接转换

本教程的最后一步是完成直接转换迁移。 完成后,可确保 Azure 虚拟机上 SQL Server 中迁移的数据库可供使用。 连接到数据库的应用程序需要停机时间,而进行直接转换的时间需要与业务或应用程序利益干系人仔细规划。

若要完成直接转换:

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

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

限制

使用 Azure Data Studio 的 Azure SQL 扩展迁移到 Azure VM 上的 SQL Server 具有以下限制:

  • 如果迁移单一数据库,数据库备份必须放置在数据库文件夹内的平面文件结构中(包括容器根文件夹),并且文件夹不能嵌套,因为不支持嵌套文件夹。
  • 如果使用同一个 Azure Blob 存储容器迁移多个数据库,则必须将不同数据库的备份文件置于容器内的单独文件夹中。
  • 不支持在目标 Azure 虚拟机上的 SQL Server 中使用 DMS 覆盖现有数据库。
  • DMS 不支持在目标上配置高可用性和灾难恢复来匹配源拓扑。
  • 不支持下列服务器对象:
    • SQL Server 代理作业
    • 凭据
    • SSIS 包
    • 服务器审核
  • 不能使用从 Azure 数据工厂创建的现有自承载集成运行时通过 DMS 进行数据库迁移。 自承载集成运行时最初在 Azure Data Studio 中使用 Azure SQL 迁移扩展创建,可以重复用于更多数据库迁移。
  • 迁移到 Azure 虚拟机上的 SQL Server 时,不支持将 SQL Server 2008 及更低版本作为目标版本的 VM。
  • 如果使用的 VM 装有 SQL Server 2012 或 SQL Server 2014,则需要将源数据库备份文件存储在 Azure 存储 Blob 容器上,而不是使用网络共享选项。 将备份文件存储为页 blob,因为块 blob 仅在 SQL 2016 及更高版本中受支持。
  • 必须确保目标 Azure 虚拟机中的 SQL IaaS 代理扩展处于完整模式而不是轻量模式。
  • SQL IaaS 代理扩展仅支持对 Default Server Instance 或 Single Named Instance 进行管理。
  • 可以迁移到 SQL Server Azure 虚拟机的数据库数量取决于硬件规格和工作负载,但没有强制限制。 但是,每个数据库的每项迁移操作(开始迁移、直接转换)将依次花费几分钟时间。 例如,若要迁移 100 个数据库,创建迁移队列可能需要大约 200 (2 x 100) 分钟,并且直接转换所有 100 个数据库需要大约 100 (1 x 100) 分钟(不包括备份和还原时间)。 因此,随着数据库数量的增加,迁移速度会变慢。 Microsoft 建议根据严格的迁移测试提前安排更长的迁移时限,或者在将大量数据库迁移到 SQL Server Azure VM 时将其分成批次。
  • 除了要配置 Azure 存储帐户的网络/防火墙来允许 VM 访问备份文件之外, 还需要在 Azure VM 上配置 SQL Server 的网络/防火墙,以允许与存储帐户建立出站连接。
  • 在 SQL 迁移过程中,需要使 Azure VM 上的目标 SQL Server 保持开启状态。 此外,创建新迁移时,请故障转移或取消迁移。
  • 错误:Login failed for user 'NT Service\SQLIaaSExtensionQuery。 原因:SQL Server 实例处于单用户模式。 一个可能的原因是 Azure VM 上的目标 SQL Server 处于升级模式。 解决方案:请等待 Azure VM 上的目标 SQL Server 退出升级模式,然后再次开始迁移。
  • 错误:Ext_RestoreSettingsError, message: Failed to create restore job.;Cannot create file 'F:\data\XXX.mdf' because it already exists。 解决方案:连接到 Azure VM 上的目标 SQL Server 并删除 XXX.mdf 文件。 然后,再次开始迁移。

后续步骤