可以使用 Azure 数据库迁移服务(Azure DMS)通过 Azure 门户将数据库从 SQL Server 的本地实例迁移到 什么是 Azure Windows 虚拟机上的 SQL Server? (Azure VM),同时尽量缩短停机时间。
对于需要进行一些手动配置的数据库迁移方法,请参阅将 SQL Server 实例迁移到 Azure 虚拟机上的 SQL Server。
在本教程中,您将使用 Azure DMS 在尽量减少停机时间的情况下,把 AdventureWorks2025 数据库从本地 SQL Server 实例迁移到 Azure VM 上的 SQL Server。
注释
本教程使用脱机迁移模式,包括迁移过程中的一些可接受的停机时间。 在线迁移选项,请参阅教程:使用 Azure DMS 将 SQL Server 迁移到 Azure 虚拟机上的 SQL Server(在线)。
本教程中,您将学习如何:
- 在 Azure 门户中启动“迁移到 Azure SQL”向导。
- 指定 Azure VM 上源 SQL Server、备份位置和目标 SQL Server 的详细信息。
- 配置向导以访问源服务器和备份。
- 开始迁移并监视迁移的进度。
- 准备就绪后执行迁移直接转换。
迁移选项
以下部分介绍如何在 Azure SQL 迁移扩展或 Azure 门户中使用 Azure 数据库迁移服务。
先决条件
在开始学习本教程之前:
确保可以访问 Azure 门户。
确保在您的订阅中注册了Microsoft.DataMigration资源提供程序。
具有一个已分配到以下内置角色之一的 Azure 帐户:
Azure VM 上 SQL Server 的目标实例以及从服务器消息块(SMB)网络共享上传数据库备份文件的存储帐户的参与者。
包含 Azure VM 或 Azure 存储帐户上 SQL Server 目标实例的 Azure 资源组的读取者角色。
Azure 订阅的所有者或参与者角色。
如果不使用这些内置角色之一,则你可以分配自定义角色。
使用 Azure 门户 进行迁移时,登录用户必须在保存备份文件的 Blob 容器上具有 存储 Blob 数据读取器 访问权限,才能在迁移设置过程中列出文件和文件夹。
创建 Azure 虚拟机上的 SQL Server 的目标实例。
如果您有现有的 Azure VM,请使用 SQL Server IaaS 代理扩展在完全管理模式下进行注册。
确保用于连接到源 SQL Server 实例的登录名是 sysadmin 服务器角色的成员,或具有
CONTROL SERVER权限。提供包含完整数据库备份文件和后续事务日志备份文件的 SMB 网络共享、Azure 存储帐户文件共享或 Azure 存储帐户 Blob 容器。 Azure DMS 在数据库迁移期间使用备份位置。
始终使用专用存储帐户进行迁移。 与其他工作负荷共享可能会导致冲突和安全风险。
迁移完成后,轮换存储帐户密钥以确保备份安全,或者不再需要存储帐户时将其删除。
Azure DMS 不会进行数据库备份,也不会代表你启动任何数据库备份。 实际上,该服务使用现有数据库备份文件进行迁移。
如果数据库备份文件位于 SMB 网络共享中, 请创建一个 Azure 存储帐户 ,该帐户允许 Azure DMS 上传数据库备份文件,以及迁移数据库。 请确保在创建 Azure DMS 实例的同一区域中创建 Azure 存储帐户。
可将每个备份写入单独的备份文件或多个备份文件。 不支持将多个备份(例如完整日志和事务日志)追加到单个备份媒体。
可以提供压缩的备份来减少遇到与迁移大型备份相关的潜在问题的可能性。
确保运行源 SQL Server 实例的服务帐户对包含数据库备份文件的 SMB 网络共享具有读取和写入权限。
如果要迁移受透明数据加密保护的数据库(TDE),请在迁移数据之前将证书从源 SQL Server 实例迁移到 Azure VM 上的 SQL Server。 有关详细信息,请参阅 将受 TDE 保护的数据库移到另一个 SQL Server。
小窍门
如果数据库包含受 Always Encrypted 保护的敏感数据,迁移过程会自动将 Always Encrypted 密钥迁移到 Azure VM 上 SQL Server 的目标实例。
如果数据库备份在网络文件共享中,请提供一台可在其上安装自承载集成运行时的计算机,以访问和迁移数据库备份。 迁移向导提供下载链接和身份验证密钥,用于下载和安装自承载集成运行时。
在为迁移做准备时,请确保安装自承载集成运行时的计算机启用了以下出站防火墙规则和域名:
域名 出站端口 Description 公有云: {datafactory}.{region}.datafactory.azure.net
或*.frontend.clouddatahub.net
Azure 政府版:{datafactory}.{region}.datafactory.azure.us
由 21Vianet 运营的 Microsoft Azure:{datafactory}.{region}.datafactory.azure.cn443 自承载集成运行时需要连接到 Azure DMS。
对于在公有云中新建的数据工厂,可以在自承载集成运行时密钥中找到完全限定的域名 (FQDN),其格式为{datafactory}.{region}.datafactory.azure.net。
对于现有数据工厂,如果在自承载集成密钥中未看到 FQDN,请改用*.frontend.clouddatahub.net。download.microsoft.com443 自承载集成运行时下载更新时需要此端口。 如果禁用自动更新,则可以跳过配置此域。 *.core.windows.net443 用于通过连接到 Azure 存储帐户的自托管集成运行时从网络共享上传数据库备份 小窍门
如果已在 Azure 存储帐户中存储数据库备份文件,则迁移过程中不需要自承载集成运行时。
如果使用自承载集成运行时,请确保安装了运行时的计算机可以连接到源 SQL Server 实例和备份文件所在的网络文件共享。
启用出站端口 445 以允许访问网络文件共享。 有关详细信息,请参阅有关使用自承载集成运行时的建议。
如果首次使用 Azure DMS,请确保
Microsoft.DataMigration在订阅中注册资源提供程序。
启动新迁移
本教程介绍如何从 SQL Server 脱机迁移到 Azure VM 上的 SQL Server。
若要开始新的迁移,请执行以下操作:
在 Azure 门户中转到 Azure 数据库迁移服务 。 使用 +Create 创建数据库迁移服务的新实例,或选择现有实例。 然后,转到数据库迁移服务实例。
在 Azure DMS 实例的“ 概述 ”窗格中,选择“ 新建迁移”。
在 “选择新的迁移 方案”下,选择源、目标服务器类型、备份文件存储位置、迁移模式作为 脱机迁移,然后选择 “选择”。
数据库备份可以位于本地网络共享或 Azure 存储 Blob 容器中。
在脱机迁移模式下,源 SQL Server 数据库不应用于写入活动,而数据库备份文件在 Azure VM 上的 SQL Server 目标实例上还原。 从迁移过程开始到迁移完成,应用程序将持续处于停机状态。
在 Azure SQL 虚拟机联机 Blob 迁移向导中,执行以下步骤:
在 “源详细信息 ”选项卡上,输入源 SQL Server 实例的详细信息,然后选择“ 下一步:连接到源 SQL Server”。
在 “选择迁移目标 ”选项卡上,输入订阅、资源组和目标 SQL Server VM 的详细信息。 然后选择“ 下一步:数据源配置”。
始终使用专用存储帐户进行迁移。 与其他工作负荷共享可能会导致冲突和安全风险。
迁移完成后,轮换存储帐户密钥以确保备份安全,或者不再需要存储帐户时将其删除。
Azure DMS 不会进行数据库备份,也不会代表你启动任何数据库备份。 实际上,该服务使用现有数据库备份文件进行迁移。
如果数据库备份文件位于 SMB 网络共享中, 请创建一个 Azure 存储帐户 ,该帐户允许 Azure DMS 上传数据库备份文件,以及迁移数据库。 请确保在创建 Azure DMS 实例的同一区域中创建 Azure 存储帐户。
可将每个备份写入单独的备份文件或多个备份文件。 不支持将多个备份(例如完整日志和事务日志)追加到单个备份媒体。
可以提供压缩的备份来减少遇到与迁移大型备份相关的潜在问题的可能性。
在 数据源配置 步骤中,选择数据库备份的位置。 数据库备份可以位于本地网络共享或 Azure 存储 Blob 容器中。
如果在本地网络共享中提供数据库备份,请在向导的下一步中设置自承载集成运行时。 需要自承载集成运行时才能访问源数据库备份、检查备份集的有效性,并将备份上传到 Azure 存储帐户。 如果数据库备份已在 Azure 存储 Blob 容器中,则不需要自承载集成运行时。
对于存储在 Azure 存储 Blob 容器中的备份,请输入或选择以下信息:
Name Description 资源组 备份文件所在的资源组。 存储帐户详细信息 备份文件的存储帐户。 blob 容器 备份文件所在的 Blob 容器。 Folder 备份文件所在的文件夹。 上一个备份文件 要迁移的数据库的上次备份的文件名。 目标数据库名称 可以在迁移过程中修改目标数据库名称。 如果启用了环回检查功能并且源 SQL Server 和文件共享位于同一台计算机上,则源无法访问 FQDN 的文件共享。 若要解决此问题,请禁用环回检查功能。
对于位于网络共享上的备份,请在相应的页面上输入以下附加信息。
Name Description 源服务器名称 源服务器的 FQDN 或 IP。 确保运行源 SQL Server 实例的服务帐户在网络共享上具有读取权限。 身份验证类型 选择身份验证类型:SQL 或 Windows 源凭据 - 用户名 用于连接到源 SQL Server 实例和验证备份文件的凭据(Windows 和 SQL身份验证)。 源凭据 - 密码 用于连接到源 SQL Server 实例和验证备份文件的凭据(Windows 和 SQL身份验证)。 包含备份的网络共享位置 包含完整备份文件和事务日志备份文件的网络共享位置。 迁移过程会自动忽略网络共享中不属于有效备份集的任何无效文件或备份文件。 拥有网络共享位置读取权限的 Windows 用户帐户 拥有网络共享读取权限以检索备份文件的 Windows 凭据(用户名)。 密码 拥有网络共享读取权限以检索备份文件的 Windows 凭据(密码)。 目标数据库名称 可以在迁移过程中修改目标数据库名称。
备份存储方案
Azure Data Studio 的 Azure SQL 迁移扩展不需要 Azure 存储帐户网络设置上的特定配置,即可将 SQL Server 数据库迁移到 Azure。
确保资源可以访问 Azure 存储帐户。 根据数据库备份位置和所需的存储帐户网络设置,请参阅下表了解各种迁移方案和网络配置:
| Scenario | SMB 网络共享 | Azure 存储帐户容器 |
|---|---|---|
| 已从所有网络启用 | 无额外步骤 | 无额外步骤 |
| 已从所选虚拟网络和 IP 地址启用 | 本地自承载集成运行时 (SHIR) | 存储在 Azure 存储容器中的备份 |
| 已从所选虚拟网络和 IP 地址 + 专用终结点启用 | Azure VM 自承载集成运行时(SHIR) | 存储在 Azure 存储容器中的备份(专用终结点) |
本地自托管集成运行时(SHIR)
如果在本地网络上安装 SHIR,请执行以下步骤:
从 SHIR 计算机连接到 Azure 门户。
打开 Azure 存储帐户,然后转到“ 网络 ”窗格。
确保 已将公用网络访问 设置为 “从所选虚拟网络和 IP 地址启用”。
在 “防火墙 ”部分中,选中“ 添加客户端 IP 地址 ”复选框。
输入主机的客户端 IP 地址,然后选择“ 保存”。
创建数据库迁移服务实例
步骤 1:在 Azure 门户中,导航到“Azure 数据库迁移服务”页。 创建 Azure 数据库迁移服务的新实例,或重复使用之前创建的现有实例。
使用数据库迁移服务的现有实例
若要使用数据库迁移服务的现有实例,请执行以下操作:
创建数据库迁移服务的新实例
若要创建数据库迁移服务的新实例,请执行以下操作:
在 Microsoft Azure 门户中的“Azure 数据库迁移服务”下,选择“创建”。
在“选择迁移方案和数据库迁移服务”中,选择所需的输入(如源服务器和目标服务器类型),选择“数据库迁移服务”,然后选择“选择”。
在下一个屏幕“创建数据迁移服务”上,选择订阅和资源组,然后选择“位置”,输入数据库迁移服务名称。 选择 审阅 + 创建。 这会创建 Azure 数据库迁移服务。
如果需要自承载集成运行时 (SHIR),请在数据库迁移服务的概述页上,在“设置”下选择“集成运行时”,然后完成以下步骤:
选择“配置集成运行时”,然后选择“下载并安装集成运行时”链接,以在 Web 浏览器中打开下载链接。 下载集成运行时,然后将其安装在满足连接到源 SQL Server 实例的先决条件的计算机上。 有关详细信息,请参阅 SHIR 建议。
安装完成后,Microsoft Integration Runtime Configuration Manager 会自动打开以开始注册过程。
在“身份验证密钥”表中,复制向导中提供的身份验证密钥之一,并将其粘贴到 Microsoft Integration Runtime Configuration Manager 中。
如果该身份验证密钥有效,则 Integration Runtime Configuration Manager 中会显示一个绿色勾选图标。 绿色勾选标记指示可以继续注册。
注册自承载集成运行时后,关闭 Microsoft Integration Runtime Configuration Manager。 在“设置”>“集成运行时”下,可能需要几分钟时间才能在 Microsoft Azure 门户上反映数据库迁移服务的节点详细信息。
注释
有关自承载集成运行时的详细信息,请参阅创建和配置自承载集成运行时。
开始数据库迁移
在 “数据库迁移摘要 ”选项卡上,查看详细信息,然后选择“ 开始迁移”。 服务启动数据库迁移,并自动将你返回到 Azure DMS 仪表板。
监视数据库迁移
每次迁移状态刷新时,Azure DMS 都会返回最新的已知迁移状态。 下表描述了可能的状态:
| 状态 | Description |
|---|---|
| 已到达 | 备份文件已到达源备份位置并已经过验证。 |
| 正在上传 | 集成运行时正在将备份文件上传到 Azure 存储。 |
| 已上传 | 备份文件已上传到 Azure 存储。 |
| 正在还原 | 该服务正在将备份文件还原到 Azure VM 上的 SQL Server。 |
| 恢复 | 备份文件已成功在 Azure VM 上的 SQL Server 上还原。 |
| 已取消 | 迁移过程已取消。 |
| 已忽略 | 已忽略备份文件,因为它不属于有效的数据库备份链。 |
在 Azure VM 上的 SQL Server 实例上还原所有数据库备份后,Azure DMS 会启动自动迁移直接转换,以确保迁移的数据库已准备好使用。 迁移状态从“正在进行”更改为“成功”。
局限性
如果迁移单一数据库,必须将数据库备份放置在数据库文件夹(包括容器根文件夹)内的平面文件结构中。 无法嵌套这些文件夹,因为不支持嵌套。
如果使用同一个 Azure Blob 存储容器迁移多个数据库,则必须将不同数据库的备份文件置于容器内的单独文件夹中。
不能使用 DMS 覆盖 Azure VM 上目标 SQL Server 中的现有数据库。
Azure DMS 不支持在目标上配置高可用性和灾难恢复以匹配源拓扑。
不支持下列服务器对象:
- SQL Server 代理作业
- Credentials
- SQL Server Integration Services (SSIS)软件包
- 服务器审核
不能使用通过 Azure 数据工厂(ADF)创建的现有自承载集成运行时进行 DMS 数据库迁移。 最初,应使用 Azure Data Studio 中的 Azure SQL 迁移扩展创建自承载集成运行时。 可以重复使用它进行进一步的数据库迁移。
迁移到 Azure VM 上的 SQL Server 时,不支持以 SQL Server 2008 及更早版本为目标版本的 VM。
如果将 VM 与 SQL Server 2012 或 SQL Server 2014 配合使用,则需要将源数据库备份文件存储在 Azure 存储 Blob 容器上,而不是使用网络共享选项。 将备份文件存储为页 Blob,因为块 Blob 仅在 SQL Server 2016 及更高版本中受支持。
必须确保目标 Azure VM 中的 SQL Server IaaS 代理扩展处于 完整模式 ,而不是轻型模式。
使用 DMS 迁移到 Azure SQL VM 在内部使用 SQL Server IaaS 代理。 SQL Server IaaS 代理扩展仅支持管理默认服务器实例或单个命名实例。
可以使用一个或多个迁移同时将最多 100 个数据库迁移到与目标相同的 Azure VM。 此外,完成包含 100 个数据库的迁移后,请等待至少 30 分钟,然后再开始向 Azure VM 上的同一 SQL Server 发起新的迁移。 此外,每个数据库的每项迁移操作(开始迁移、直接转换)将依次花费几分钟时间。 例如,若要迁移 100 个数据库,创建迁移队列可能需要大约 200 (2 x 100) 分钟,大约需要 100 (1 x 100) 分钟才能直接转换所有 100 个数据库(不包括备份和还原时间)。 因此,随着数据库数量的增加,迁移速度会变慢。 应根据严格的迁移测试提前计划更长的迁移窗口,或者在将大量数据库迁移到 Azure VM 上的 SQL Server 时将其分区成批。
除了配置 Azure 存储帐户的网络/防火墙以允许 VM 访问备份文件外,还需要在 Azure VM 上配置 SQL Server 的网络/防火墙,以允许与存储帐户建立出站连接。
在 SQL Server 迁移正在进行时,需要使目标 Azure VM 保持打开状态 。 此外,创建新迁移时,请故障转移或取消迁移。
可能的错误消息
用户登录失败“NT Service\SQLIaaSExtensionQuery”
错误:Login failed for user 'NT Service\SQLIaaSExtensionQuery
原因:SQL Server 实例处于单用户模式。 一个可能的原因是目标 SQL Server VM 处于升级模式。
解决方案:等待目标 SQL Server VM 退出升级模式,然后重新开始迁移。
创建还原作业失败
错误:Ext_RestoreSettingsError, message: Failed to create restore job.;Cannot create file 'F:\data\XXX.mdf' because it already exists.
解决方案:连接到目标 SQL Server VM 并删除 XXX.mdf 该文件。 然后,再次开始迁移。