适用范围:SQL Server
本文可帮助你准备环境,以便在 Azure 门户中通过日志重播服务 (LRS)将由 Azure Arc 启用的 SQL Server 实例迁移到Azure SQL 托管实例。
使用 LRS,可以通过日志传送(联机迁移)使用备份和还原将 SQL Server 数据库迁移到 Azure SQL 托管实例:
注释
可以直接向 产品组提供有关迁移体验的反馈。
先决条件
若要通过 Azure 门户将 SQL Server 数据库迁移到 Azure SQL 托管实例,需要满足以下先决条件:
- 有效的 Azure 订阅。 如果没有帐户,请创建一个免费帐户。
-
受支持的由 Azure Arc 启用的 SQL Server 实例,带有 SQL Server 版本
1.1.3211.337或更高版本的 Azure 扩展。 可以使用 Azure 门户 或 Azure CLI 升级扩展。
支持的 SQL Server 版本
使用 LRS 进行迁移适用于 Windows 上每个版本的 SQL Server。 虽然支持迁移到 SQL 托管实例的“常规用途”和“业务关键”服务层级,但直接迁移到业务关键服务层级有一些 重要的限制 需要考虑。
下表列出了 LRS 支持的最低 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) |
仅支持从具有相应 更新策略的 SQL 托管实例到 SQL Server 2025 和 SQL Server 2022 的反向迁移。 可以通过其他工具(例如 本机备份和还原)手动撤消迁移,或者在 SSMS 中手动配置链接。
Permissions
本部分介绍需要通过 Azure 门户将 SQL Server 实例迁移到 SQL 托管实例的权限。
在源 SQL Server 实例上,需要以下权限:
若要使用 LRS 进行迁移,需要对 SQL 托管实例目标具有以下权限之一:
- SQL 托管实例参与者角色
- 具有以下权限的角色:
Microsoft.Sql/managedInstances/databases/*
创建存储帐户
使用 Azure Blob 存储帐户作为 SQL Server 实例与 SQL 托管实例部署之间的备份文件的中间存储。 存储帐户必须与 SQL 托管实例目标位于同一 Azure 订阅中。
若要在存储帐户中创建新的存储帐户和 blob 容器:
-
创建存储帐户:
- 在 Azure 门户中搜索 存储帐户 ,然后选择“ 创建”。
- 在“ 基本信息 ”选项卡上,选择订阅和资源组。 该区域应与 SQL 托管实例目标相同。
- 将 首选存储类型 留空。
- 对选项卡的其余部分使用默认设置,然后选择“ 查看 + 创建”。
- 验证通过后,选择“ 创建”。
- 在存储帐户中创建 blob 容器。
- 转到 Azure 门户中的新存储帐户。
- 在“数据存储”下,选择“容器”。
- 使用 “添加容器” 打开 “新建容器 ”窗格。
- 输入容器的名称,将选项保留为其默认值,然后选择“ 创建 ”以创建容器。
- (可选)如果 Azure 存储位于防火墙后面,则预配 SQL 托管实例后,Azure Blob 存储需要 其他配置 。
向 Azure Blob 存储授予权限
使用 LRS 的 Azure Arc 中的 SQL Server 迁移通过托管标识对 Azure Blob 存储进行身份验证。
需要授予以下权限:
- 授予用户对 计划在迁移过程中存储备份的存储帐户的访问权限。
- 向用户授予对 包含存储帐户的资源组的访问权限。
- 预配 SQL 托管实例后,授予对存储帐户的托管标识访问权限。
授予用户对存储帐户的访问权限
若要在迁移过程中访问数据库备份,请将登录到 Azure 门户并执行迁移的用户分配到包含备份的存储帐户的 存储 Blob 数据读取者 角色。
若要分配角色,请执行以下步骤:
在 Azure 门户中,转到包含存储帐户的资源组。
在“资源”菜单中选择“访问控制(IAM)”。
使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
搜索并选择 “存储 Blob 数据读取者 ”角色。 然后选择下一步。
使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体的访问权限的选项。
选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。
向用户授予对资源组的访问权限
若要在迁移过程中访问数据库备份,登录到 Azure 门户并执行迁移的用户需要在包含存储帐户的资源组上分配 “读取者 ”角色。
若要分配角色,请执行以下步骤:
在 Azure 门户中,转到包含存储帐户的资源组。
在“资源”菜单中选择“访问控制(IAM)”。
使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
搜索并选择“读取者”角色。 然后选择下一步。
使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体 的访问权限的选项,然后使用 “下一步” 继续。
在 “工作分配类型 ”选项卡上,将 “工作分配”类型 设置为 “活动 ”,并将 “工作分配持续时间 ”设置为 “永久”:
选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。
授予托管标识对存储帐户的访问权限
预配 SQL 托管实例后,需要为 SQL 托管实例分配 存储 Blob 数据读取者 角色的托管标识,以便在迁移过程中访问 Azure Blob 存储帐户。
首先,必须确定 SQL 托管实例使用的托管标识类型。 为此,请执行以下步骤:
- 转到 Azure 门户中的 SQL 托管实例。
- 在“安全性”下,选择“标识”。
- 如果在 “用户分配的托管标识”下看到 “找不到用户分配的托管标识”,则 SQL 托管实例将使用默认 的系统分配托管标识。
- 如果在 “主标识 ”字段中看到一个条目,则 SQL 托管实例使用自定义 用户分配的托管标识。 记下此标识,以在向 存储 Blob 数据读取者 授予对存储帐户的访问权限时选择此托管标识的步骤。
若要授予对存储帐户的访问权限,请执行以下步骤:
- 转到要用于迁移的 Azure 门户中的 Azure Blob 存储帐户。
- 在“资源”菜单中选择“访问控制(IAM)”。
- 使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
- 搜索并选择 “存储 Blob 数据读取者 ”角色。 然后选择下一步。
- 在 “分配访问权限” 下,勾选 “托管标识” 选项。
- 使用 “选择成员” 打开 “选择成员 ”窗格。
- 如果 SQL 托管实例使用默认 系统分配的托管标识:
- 在 “托管标识”下,选择 “SQL 托管实例”。
- 搜索并选择 SQL 托管实例的名称。
- 使用 Select 保存所选内容。
- 如果 SQL 托管实例使用 用户分配的托管标识:
- 在 “托管标识”下,选择 “用户分配的托管标识”。
- 在标识页中搜索您之前在SQL 托管实例中记录的主标识名称,并选择它。
- 使用 Select 保存所选内容。
- 选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。
将至少一个完整备份上传到此存储帐户后,可以在 SQL 托管实例上运行以下命令,验证是否可以访问 Azure Blob 存储帐户:
RESTORE HEADERONLY
FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<containername>/full_0_0.bak';
将备份上传到 Blob 存储帐户
Blob 容器准备就绪且已确认 SQL 托管实例可以访问容器时,可以开始将备份上传到 Azure Blob 存储帐户。 将所有备份上传到存储帐户后,即可继续迁移。
将备份上传到 Azure:
请考虑采用以下最佳做法:
- 使用备份
COMPRESSION和CHECKSUM选项来减小备份文件的大小,并防止迁移损坏的数据库。 - 以较小的批次进行备份。
- 使用并行上传线程。
- 使最后一个备份文件尽可能小。
- 若要使用同一个 Azure Blob 存储容器迁移多个数据库,请将某个单独数据库的所有备份文件都放入该容器中单独的文件夹中。 为每个数据库文件夹使用平面文件结构。 不支持数据库文件夹内的嵌套文件夹。
在 SQL Server 实例上进行备份
将想要迁移到完整恢复模式的数据库设置为允许日志备份。
-- 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 存储帐户
备份准备就绪后,想要使用 LRS 开始将数据库迁移到 SQL 托管实例,请使用以下方法将现有备份复制到 Blob 存储帐户:
- 下载并安装 AzCopy。
- 下载并安装 Azure 存储资源管理器。
- 使用 Azure 门户中的存储资源管理器。
注释
若要使用同一个 Azure Blob 存储容器迁移多个数据库,请将某个单独数据库的所有备份文件都放入该容器中单独的文件夹中。 为每个数据库文件夹使用平面文件结构。 不支持数据库文件夹内的嵌套文件夹。
局限性
LRS 的限制适用于通过 Azure 门户的迁移。
迁移到业务关键服务层级时的限制
迁移到“业务关键”服务层级中的 SQL 托管实例时,请考虑以下限制:
- 迁移大型数据库时,可能会遇到相当大的停机时间,因为在切换后,数据库会不可用,此时正在同步到 业务关键 服务层的次要副本。 有关解决方法,请参阅更长时间的直接转换部分。
- 如果计划外故障转移、系统更新或安全修补程序中断迁移,则迁移会自动从头开始重启。 这种限制使得难以规划出可预测的迁移计划,并避免在最后一刻出现意外。
重要
这些限制仅适用于迁移到 业务关键 服务层级中的 Azure SQL 托管实例,而不适用于 常规用途 服务层级。
业务关键服务层级中的较长切换时间
如果要迁移到“业务关键”服务层级中的 SQL 托管实例,在将数据库播种到次要副本时,请考虑到在主要副本上将数据库联机的延迟。 对于较大的数据库,这种延迟尤其如此。
与在“常规用途”服务层级中相比,迁移到“业务关键”服务层级中的 SQL 托管实例耗时更长。 切换到 Azure 完成后,数据库将不可用,直到将数据库从主副本同步到三个次要副本。 播种过程可能需要较长时间,具体取决于数据库的大小。 数据库越大,播种到次要副本耗时更长,可能需要长达数小时的时间。
如果希望数据库在切换完成后立即可用,请考虑以下备用方案:
- 首先迁移到“常规用途”服务层级,然后升级到 “业务关键 ”服务层级。 升级服务层级是一项联机操作,它使数据库保持联机状态,直到短暂的故障转移(这是在升级操作的最后一步)。
- 使用托管实例链接联机迁移到“业务关键”实例,而无需等待数据库在直接转换后可用。
通过 Azure 门户监视迁移仅适用于满足监视 许可要求的 SQL Server 实例。