教程:使用 DMS 将 SQL Server 迁移到 Azure 虚拟机上的 SQL Server

可以使用 Azure 数据库迁移服务和 Azure Data Studio 中的 Azure SQL 迁移扩展将数据库从 SQL Server 的本地实例迁移到 Azure 虚拟机上的 SQL Server(SQL Server 2016 和更高版本),此过程造成的故障时间最短。

对于需要进行一些手动配置的数据库迁移方法,请参阅将 SQL Server 实例迁移到 Azure 虚拟机上的 SQL Server

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

本教程提供脱机和联机迁移选项,包括迁移过程中可接受的故障时间。

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

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

先决条件

在开始学习本教程之前:

  • 下载并安装 Azure Data Studio

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

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

    • Azure 虚拟机上的 SQL Server 目标实例的参与者角色,以及将服务器消息块 (SMB) 网络共享中的数据库备份文件上传到的存储帐户的参与者角色

    • 包含 Azure 虚拟机上的 SQL Server 目标实例的 Azure 资源组或 Azure 存储帐户的读取者角色

    • Azure 订阅的所有者或参与者角色

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

    重要

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

  • 创建 Azure 虚拟机上的 SQL Server 的目标实例。

    重要

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

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

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

    • 适用于 Azure Data Studio 的 Azure SQL 迁移扩展不会进行数据库备份,也不会代表你启动任何数据库备份。 实际上,该服务使用现有数据库备份文件进行迁移。

    • 如果数据库备份文件位于 SMB 网络共享中,请创建一个 Azure 存储帐户,数据库迁移服务可以使用该帐户将数据库备份文件上传到数据库并迁移数据库。 确保在创建数据库迁移服务实例的同一区域中创建 Azure 存储帐户。

    • 可将每个备份写入单独的备份文件或多个备份文件。 不支持将多个备份(例如完整日志和事务日志)追加到单个备份媒体。

    • 可以提供压缩的备份来减少遇到与迁移大型备份相关的潜在问题的可能性。

  • 确保运行源 SQL Server 实例的服务帐户对包含数据库备份文件的 SMB 网络共享具有读取和写入权限。

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

    提示

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

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

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

    域名 出站端口 说明
    公有云:{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 以允许访问网络文件共享。 有关详细信息,请参阅有关使用自承载集成运行时的建议

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

本教程介绍如何从 SQL Server 脱机迁移到 Azure 虚拟机上的 SQL Server。

在 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. 在“迁移到 Azure SQL”向导的“步骤 1: 要评估的数据库”中,选择要评估的数据库。 然后,选择“下一步”。

  2. 在“步骤 2: 评估结果和建议”中完成以下步骤:

    1. 在“选择 Azure SQL 目标”中,选择“Azure 虚拟机上的 SQL Server”。

      显示评估确认的屏幕截图。

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

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

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

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

      Azure Data Studio 将收集性能数据,直到你停止收集数据或关闭 Azure Data Studio。

      10 分钟后,Azure Data Studio 将指示有适用于 Azure 虚拟机上的 SQL Server 的建议。 生成第一个建议后,可以选择“重新开始收集数据”以继续收集数据并微调 SKU 建议。 如果你的使用模式会随时变化,则扩展的评估特别有用。

    6. 在选定的“Azure 虚拟机上的 SQL Server”目标中,选择“查看详细信息”打开详细的 SKU 建议报告:

    7. 在“查看 Azure 虚拟机上的 SQL Server 建议”中查看建议。 若要保存建议的副本,请选中“保存建议报告”复选框。

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

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

配置迁移设置

  1. 在“迁移到 Azure SQL”向导的“步骤 3: Azure SQL 目标”中,选择你的 Azure 帐户、Azure 订阅、Azure 区域或位置,以及包含 Azure 虚拟机上的 SQL Server 目标实例的资源组。 然后,选择“下一步”。

  2. 在“步骤 4: 迁移模式”中选择“脱机迁移”,然后选择“下一步”。

    注意

    在脱机迁移模式下,当在 Azure 虚拟机上的 SQL Server 目标实例中还原数据库备份文件时,不应将源 SQL Server 数据库用于写入活动。 从迁移过程开始到迁移完成,应用程序将持续处于停机状态。

  3. 在“步骤 5: 数据源配置”中,选择你的数据库备份的位置。 数据库备份可能位于本地网络共享中,也可能位于 Azure 存储 Blob 容器中。

    注意

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

    如果数据库备份已在 Azure 存储 Blob 容器中,则无需安装自承载集成运行时。

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

    名称 说明
    源凭据 - 用户名 用于连接到源 SQL Server 实例和验证备份文件的凭据(Windows 和 SQL身份验证)。
    源凭据 - 密码 用于连接到源 SQL Server 实例和验证备份文件的凭据(Windows 和 SQL身份验证)。
    包含备份的网络共享位置 包含完整备份文件和事务日志备份文件的网络共享位置。 在迁移过程中,将自动忽略网络共享中不属于有效备份集的所有无效文件或备份文件。
    拥有网络共享位置读取权限的 Windows 用户帐户 拥有网络共享读取权限以检索备份文件的 Windows 凭据(用户名)。
    密码 拥有网络共享读取权限以检索备份文件的 Windows 凭据(密码)。
    目标数据库名称 可以在迁移过程中修改目标数据库名称。
  • 对于存储在 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 存储帐户,因为虚拟机具有无法添加到 IP 地址范围部分的非公共 IP 地址。

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

若要应用此特定配置,请找到 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 SQL”向导的“步骤 6: Azure 数据库迁移服务”中,创建 Azure 数据库迁移服务的新实例或重用以前创建的现有实例。

注意

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

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

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

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

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

  3. 选择“下一步”。

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

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

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

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

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

  4. 在“设置集成运行时”下完成以下步骤:

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

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

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

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

      注意

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

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

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

开始数据库迁移

在“迁移到 Azure SQL”向导的“步骤 7: 摘要”中查看创建的配置,然后选择“开始迁移”以开始数据库迁移。

监视数据库迁移

  1. 在 Azure Data Studio 的服务器菜单中的“常规”下,选择“Azure SQL 迁移”转到 Azure SQL 迁移仪表板。

    在“数据库迁移状态”下,可以跟踪正在进行、已完成和失败(如果有)的迁移,或者查看所有数据库迁移。

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

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

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

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

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

在 Azure 虚拟机上的 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 代理扩展处于完整模式而不是轻量模式。

- 使用 DMS 迁移到 Azure SQL VM 在内部使用 SQL IaaS 代理。 并且,SQL IaaS 代理扩展仅支持对 Default Server Instance 或 Single Named Instance 进行管理。

- 可以同时使用一个或多个迁移将最多 100 个数据库迁移到与目标相同的 Azure SQL Server 虚拟机。 此外,一旦包含 100 个数据库的迁移完成,请等待至少 30 分钟,然后再开始运行新的迁移,并迁移到与目标相同的 Azure SQL Server 虚拟机。 此外,每个数据库的每项迁移操作(开始迁移、直接转换)将依次花费几分钟时间。 例如,若要迁移 100 个数据库,创建迁移队列可能需要大约 200 (2 x 100) 分钟,并且直接转换所有 100 个数据库需要大约 100 (1 x 100) 分钟(不包括备份和还原时间)。 因此,随着数据库数量的增加,迁移速度会变慢。 应根据严格的迁移测试提前安排更长的迁移时限,或者在将大量数据库迁移到 SQL Server Azure VM 时将其分成批次。

- 除了要配置 Azure 存储帐户的网络/防火墙来允许 VM 访问备份文件之外。 还需要在 Azure VM 上配置 SQL Server 的网络/防火墙,以允许与存储帐户建立出站连接。

- 在 SQL 迁移过程中,需要使 Azure VM 上的目标 SQL Server 保持开启状态。 此外,创建新迁移时,请故障转移或取消迁移。

可能的错误消息

用户登录失败“NT Service\SQLIaaSExtensionQuery”

错误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 文件。 然后,再次开始迁移。