通过


为 SQL VM 迁移准备环境 (预览版) - SQL Server Azure Arc中的迁移

applies to:SQL Server

本文将帮助你为 Azure Arc 启用的 SQL Server 实例准备环境,以便在 Azure 门户中将其迁移到 Azure 虚拟机上的 SQL Server。

注释

  • 通过 Azure 门户迁移到 Azure 虚拟机上的 SQL Server,目前为 preview
  • 可以直接向 产品组提供有关迁移体验的反馈。

先决条件

若要通过 Azure 门户将SQL Server数据库迁移到 Azure VM 上的SQL Server,需要满足以下先决条件:

  • 活动的 Azure 订阅。 如果没有帐户,请创建一个免费帐户
  • SQL Server 的一个实例,由 Azure Arc 启用,并使用适用于 SQL Server 的 Azure 扩展的最新版本。 若要升级扩展,请参阅 升级扩展
  • 可以选择在Azure VM 上使用现有SQL Server,也可以在迁移过程中预配目标SQL Server VM。 如果选择使用现有的 SQL Server VM,则必须通过 SQL IaaS 代理扩展来注册它。

支持的SQL Server版本

SQL Server VM 迁移适用于 Windows 和 Linux 上每个版本的SQL Server。

下表列出了迁移支持的最低SQL Server版本:

SQL Server 版本 最低要求的维护更新
SQL Server 2025 (17.x) SQL Server 2025 RTM (17.0.1000.7)
SQL Server 2022 (16.x) SQL Server 2022 RTM (16.0.1000.6)
SQL Server 2019 (15.x) SQL Server 2019 RTM (15.0.2000.5)
SQL Server 2017 (14.x) SQL Server 2017 RTM (14.0.1000.169)
SQL Server 2016 (13.x) SQL Server 2016 RTM (13.0.1400.361)
SQL Server 2014 (12.x) SQL Server 2014 RTM (12.0.2000.8)
SQL Server 2012 (11.x) SQL Server 2012 RTM (11.0.2100.60)

权限

本部分介绍您需要的权限,以便通过 Azure 门户将 SQL Server 数据库迁移到 Azure 虚拟机上的 SQL Server。

在源SQL Server实例上,需要以下权限:

  • 如果启用最小特权,则数据库迁移过程中会根据需要授予所需的权限,例如 sysadmin
  • 如果无法使用最低权限,则需要对源SQL Server实例具有 sysadmin 权限。

需要在目标Azure VM 上虚拟机参与者角色来执行迁移。

创建存储帐户

使用 Azure Blob Storage 帐户作为 SQL Server 实例与 Azure VM 上的 SQL Server 之间备份文件的中间存储。 存储帐户必须与您的 Azure VM 目标上的 SQL Server 在同一 Azure 订阅和区域内。

若要在存储帐户中创建新的存储帐户和 blob 容器:

  1. 创建存储帐户
    1. 在 Azure 门户中搜索 Storage 帐户,然后选择 Create
    2. 在“ 基本信息 ”选项卡上,选择订阅和资源组。 区域应与目标 Azure VM 上的 SQL Server 相同。
    3. 首选存储类型 留空。
    4. 对选项卡的其余部分使用默认设置,然后选择“ 查看 + 创建”。
    5. 验证通过后,选择“ 创建”。
  2. 在存储帐户中创建 blob 容器
    1. 转到Azure门户中的新存储帐户。
    2. 在“数据存储”下,选择“容器”。
    3. 使用 “添加容器” 打开 “新建容器 ”窗格。
    4. 输入容器的名称,将选项保留为其默认值,然后选择“ 创建 ”以创建容器。
  3. (可选)如果 Azure 存储在防火墙后面,Azure Blob 存储在 SQL Server VM 预配后需要额外配置。 为名称为 VM 的子网配置委派。

授予对Azure Blob Storage的权限

Azure Arc 中的 SQL Server VM 迁移使用托管标识进行身份验证,以对 Azure Blob Storage 进行身份验证。

需要授予以下权限:

  • 授予用户对 计划在迁移过程中存储备份的存储帐户的访问权限。
  • 向用户授予对 包含存储帐户的资源组的访问权限。
  • 在预配 SQL Server VM 后,授予托管标识对存储帐户的访问权限。

授予用户对存储帐户的访问权限

若要在迁移过程中访问数据库备份,请分配登录到 Azure 门户的用户,并执行到包含备份的存储帐户的 Storage Blob 数据读取者角色的迁移。

若要分配角色,请执行以下步骤:

  1. 在Azure门户中,转到包含存储帐户的资源组。

  2. 在“资源”菜单中选择“访问控制(IAM)”

  3. 使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。

  4. 搜索并选择 “存储 Blob 数据读取者 ”角色。 然后,选择下一步

    在 Azure 门户中查找存储帐户的 IAM 页面上的存储 Blob 数据读取者角色的截图。

  5. 使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体的访问权限的选项。

  6. 选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。

向用户授予对资源组的访问权限

若要在迁移过程中访问数据库备份,登录到 Azure 门户并执行迁移的用户需要在包含存储帐户的资源组上分配 Reader 角色。

若要分配角色,请执行以下步骤:

  1. 在Azure门户中,转到包含存储帐户的资源组。

  2. 在“资源”菜单中选择“访问控制(IAM)”

  3. 使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。

  4. 搜索并选择“读取者”角色。 然后,选择下一步

    在 Azure 门户中查找资源组的阅读者角色的截图。

  5. 使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体 的访问权限的选项,然后使用 “下一步” 继续。

  6. “工作分配类型 ”选项卡上,将 “工作分配”类型 设置为 “活动 ”,并将 “工作分配持续时间 ”设置为 “永久”:

    设置工作分配的类型为“活动”,并将分配持续时间设置为“永久”的截图,在 Azure 门户中。

  7. 选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。

授予托管标识对存储帐户的访问权限

预配SQL Server VM 后,需要将 SQL Server VM 的托管标识分配给 Storage Blob 数据读取者角色,以便在迁移过程中访问Azure Blob Storage帐户。

首先,必须确定SQL Server VM 使用的托管标识类型。 为此,请执行以下步骤:

  1. 在 Azure 门户中转到 虚拟机资源
  2. “安全性”下,选择“ 标识 ”以打开 “标识 ”窗格。 使用 系统分配 的标识或 用户分配 的标识之间进行选择:
    1. “系统分配 ”选项卡上,可以使用 “状态 ”切换来启用系统分配的标识(如果尚未启用)。 如果启用了系统分配的标识,随后,您可以选择 Azure 角色分配 转到 Azure 角色分配 页面,然后使用 + 添加角色分配(预览版) 向 SQL Server VM 的系统分配身份授予 Storage Blob 数据读取者 权限,通过选择 Storage 作为 Scope,然后选择您的资源来实现。
    2. User assigned选项卡上,可以看到SQL Server 虚拟机上用户分配的标识列表。 如果要添加新的用户分配标识,请选择“+ 添加用户分配的标识,然后从订阅中选择现有用户分配的标识以将其附加到SQL Server VM。 记下要用于身份验证Azure Blob Storage的用户分配标识的名称,因为后续步骤需要它。

若要为用户指定的托管身份授予对存储帐户的访问权限,请按照以下步骤操作:

  1. 转到Azure门户中要用于迁移的Azure Blob Storage帐户。
  2. 在“资源”菜单中选择“访问控制(IAM)”
  3. 使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
  4. 搜索并选择 “存储 Blob 数据读取者 ”角色。 然后,选择下一步
  5. “分配访问权限” 下,勾选 “托管标识” 选项。
  6. 使用 “选择成员” 打开 “选择成员 ”窗格。
  7. “托管标识”下,选择 “用户分配的托管标识”。
  8. SQL Server VMIdentity 页搜索您之前记录的 Primary identity 名称,并进行选择。
  9. 使用 Select 保存所选内容。
  10. 选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。

将备份上传到Blob Storage帐户

Blob 容器准备就绪并且已确认SQL Server VM 可以访问容器时,可以开始将备份上传到Azure Blob Storage帐户。 将所有备份上传到存储帐户后,即可继续迁移。

将备份上传到Azure:

  1. 在SQL Server实例上执行备份
  2. 将备份复制到Blob Storage帐户

请考虑采用以下最佳做法:

  • 使用备份 COMPRESSIONCHECKSUM 选项来减小备份文件的大小,并防止迁移损坏的数据库。
  • 以较小的批次进行备份。
  • 使用并行上传线程。
  • 使最后一个备份文件尽可能小。
  • 若要使用相同的Azure Blob Storage容器迁移多个数据库,请将单个数据库的所有备份文件放入容器内的单独文件夹中。 为每个数据库文件夹使用平面文件结构。 不支持在数据库文件夹中嵌套文件夹。

在SQL Server实例上备份

本部分中的步骤说明如何在本地备份,但也可以 直接备份到 URL

将想要迁移到完整恢复模式的数据库设置为允许日志备份。

-- To permit log backups, before the full database backup, modify the database to use the full recovery
USE master;

ALTER DATABASE SampleDB
SET RECOVERY FULL;
GO

如果还没有现有备份,则若要将数据库的完整备份、差异备份和日志备份手动备份到本地存储,请使用以下示例 T-SQL 脚本。 不需要 CHECKSUM,但建议使用它,以防止迁移损坏的数据库并加快还原时间。

以下示例将数据库完整备份到本地磁盘:

-- Take full database backup to local disk
BACKUP DATABASE [SampleDB]
    TO DISK = 'C:\BACKUP\SampleDB_full.bak'
    WITH INIT, COMPRESSION, CHECKSUM;
GO

以下示例将在本地磁盘上进行差异备份:

-- Take differential database backup to local disk
BACKUP DATABASE [SampleDB]
    TO DISK = 'C:\BACKUP\SampleDB_diff.bak'
    WITH DIFFERENTIAL, COMPRESSION, CHECKSUM;
GO

以下示例将事务日志备份到本地磁盘:

-- Take transactional log backup to local disk
BACKUP LOG [SampleDB]
    TO DISK = 'C:\BACKUP\SampleDB_log.trn'
    WITH COMPRESSION, CHECKSUM;
GO

将备份复制到Blob Storage帐户

备份准备就绪后,想要开始将数据库迁移到SQL Server VM,请使用以下方法将现有备份复制到 Blob Storage 帐户:

注释

若要使用相同的Azure Blob Storage容器迁移多个数据库,请将单个数据库的所有备份文件放入容器内的单独文件夹中。 为每个数据库文件夹使用平面文件结构。 不支持在数据库文件夹中嵌套文件夹。

验证SQL Server VM 存储访问权限

验证SQL Server VM 是否可以访问Blob Storage帐户。

首先,将任何数据库备份(如 full_0_0.bak)上传到Azure Blob Storage容器。

接下来,连接到 SQL Server VM,并运行示例测试查询,以确定SQL Server VM 是否可以访问容器中的备份。

如果使用 SAS 令牌向存储帐户进行身份验证,请将 <sastoken> 替换为 SAS 令牌,并在SQL Server VM 上运行以下查询:

CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/databases]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<sastoken>';

RESTORE HEADERONLY
    FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<containername>/full_0_0.bak';

使用 SQL IaaS 代理扩展注册SQL Server VM

如果目标SQL Server VM 已存在,则必须使用 SQL IaaS 代理扩展注册它,然后才能在Azure门户中将其选为迁移目标。 如果目标SQL Server VM 尚不存在,可以在迁移过程中预配一个新 VM,并且该 VM 将自动注册到 SQL IaaS 代理扩展。

局限性

通过 Azure 门户将SQL Server数据库迁移到 Azure VM 上的SQL Server时,请考虑以下限制:

  • 如果迁移单一数据库,必须将数据库备份放置在数据库文件夹(包括容器根文件夹)内的平面文件结构中。 无法嵌套这些文件夹,因为不支持嵌套。
  • 如果使用同一个Azure Blob Storage容器迁移多个数据库,则必须将不同数据库的备份文件放置在容器内的单独文件夹中。
  • 不能使用 DMS 覆盖运行在 Azure VM 上的目标 SQL Server 中的现有数据库。
  • SQL Server迁移不支持在目标上配置高可用性和灾难恢复以匹配源拓扑。
  • 不支持下列服务器对象:
    • SQL Server Agent作业
    • Credentials
    • SQL Server Integration Services (SSIS)包
    • 服务器审核
  • 不能使用从 Azure Data Factory (ADF) 创建的现有自承载集成运行时进行 DMS 数据库迁移。
  • 迁移到 Azure VM 上的 SQL Server 时,不支持那些目标版本为 SQL Server 2008 和更早版本的虚拟机。
  • 需要注册 SQL IaaS 代理扩展才能进行迁移。 该扩展仅支持默认实例或单个命名实例。
  • 可以使用一个或多个迁移同时将最多 100 个数据库迁移到与目标相同的Azure VM。 此外,一旦完成具有 100 个数据库的迁移,请等待至少 30 分钟,然后再开始将新的迁移到以同一 SQL Server 作为目标的 Azure VM 上。 此外,每个数据库的每项迁移操作(开始迁移、直接转换)将依次花费几分钟时间。 例如,若要迁移 100 个数据库,创建迁移队列可能需要大约 200 (2 x 100) 分钟,大约需要 100 (1 x 100) 分钟才能直接转换所有 100 个数据库(不包括备份和还原时间)。 因此,随着数据库数量的增加,迁移速度会变慢。 应根据严格的迁移测试提前计划更长的迁移窗口,或者在将大量数据库迁移到Azure VM 上的SQL Server时将其分区成批。
  • 除了配置Azure Storage帐户的网络/防火墙以允许 VM 访问备份文件外,还需要在 Azure VM 上配置SQL Server的网络/防火墙,以允许与存储帐户建立出站连接。
  • 在迁移SQL Server进行时,需要使目标Azure VM 保持打开状态。 此外,在创建新的迁移时,故障转移或取消正在进行迁移的任何迁移。

后续步骤