applies to:SQL Server
本文帮助您为在 Azure 门户中通过 Azure Arc 启用的 SQL Server 实例迁移到 Azure SQL 托管实例的 Log Replay Service(LRS) 准备环境。
使用 LRS,可以通过日志传送(联机迁移)使用备份和还原将SQL Server数据库迁移到Azure SQL 托管实例:
注释
可以直接向 产品组提供有关迁移体验的反馈。
先决条件
若要通过 Azure 门户将SQL Server数据库迁移到Azure SQL 托管实例,需要满足以下先决条件:
- 活动的 Azure 订阅。 如果没有帐户,请创建一个免费帐户。
- 支持的 SQL Server 实例通过 Azure Arc 启用,并且具有 SQL Server 版本
1.1.3238.349或更高版本的 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) |
仅支持从具有相应 update 策略 的 SQL 托管实例反向迁移到 SQL Server 2025 和 SQL Server 2022。 可以通过其他工具(例如 本机备份和还原)手动撤消迁移,或者在 SSMS 中手动配置链接。
注释
对于不受支持的 SQL Server 实例(如 SQL Server 2012 之前的版本或运行在 Linux 上的实例),请考虑直接使用 Log 重播服务迁移到 Azure SQL 托管实例。
Permissions
本部分介绍需要通过Azure门户将SQL Server实例迁移到SQL 托管实例的权限。
在源SQL Server实例上,需要以下权限:
若要使用 LRS 进行迁移,需要对SQL 托管实例目标具有以下权限之一:
- SQL 托管实例 Contributor 角色
- 具有以下权限的角色:
Microsoft.Sql/managedInstances/databases/*
创建存储帐户
使用 Azure Blob 存储 帐户作为 SQL Server 实例与 SQL 托管实例部署之间的备份文件的中间存储。 存储帐户必须与您的目标 SQL 托管实例位于同一个 Azure 订阅中。
若要在存储帐户中创建新的存储帐户和 blob 容器:
-
创建存储帐户:
- 在 Azure 门户中搜索 Storage 帐户,然后选择 Create。
- 在“ 基本信息 ”选项卡上,选择订阅和资源组。 区域应与SQL 托管实例目标相同。
- 将 首选存储类型 留空。
- 对选项卡的其余部分使用默认设置,然后选择“ 查看 + 创建”。
- 验证通过后,选择“ 创建”。
- 在存储帐户中创建 blob 容器。
- 转到Azure门户中的新存储帐户。
- 在“数据存储”下,选择“容器”。
- 使用 “添加容器” 打开 “新建容器 ”窗格。
- 输入容器的名称,将选项保留为其默认值,然后选择“ 创建 ”以创建容器。
- (可选)如果 Azure 存储 位于防火墙后面,则在部署 SQL 托管实例后,Azure Blob 存储需要 额外配置。
授予对Azure Blob 存储的权限
使用 LRS 在 Azure Arc 中进行 SQL Server 迁移时,使用托管标识对 Azure Blob 存储进行身份验证。
需要授予以下权限:
- 授予用户对 计划在迁移过程中存储备份的存储帐户的访问权限。
- 向用户授予对 包含存储帐户的资源组的访问权限。
- 预配 SQL 托管实例后,授予对存储帐户的托管标识访问权限。
授予用户对存储帐户的访问权限
若要在迁移过程中访问数据库备份,请分配登录到 Azure 门户的用户,并执行到包含备份的存储帐户的 Storage Blob 数据读取者角色的迁移。
若要分配角色,请执行以下步骤:
在Azure门户中,转到包含存储帐户的资源组。
在“资源”菜单中选择“访问控制(IAM)”。
使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
搜索并选择 “存储 Blob 数据读取者 ”角色。 然后选择下一步。
使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体的访问权限的选项。
选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。
向用户授予对资源组的访问权限
若要在迁移过程中访问数据库备份,登录到 Azure 门户并执行迁移的用户需要在包含存储帐户的资源组上分配 Reader 角色。
若要分配角色,请执行以下步骤:
在Azure门户中,转到包含存储帐户的资源组。
在“资源”菜单中选择“访问控制(IAM)”。
使用 + 添加 选择 “添加角色分配 ”并打开 “添加角色分配 ”窗格。
搜索并选择“读取者”角色。 然后选择下一步。
在 Azure 门户中查找资源组的阅读者角色的截图。 使用 +选择成员 打开 “选择成员 ”窗格,并搜索执行迁移的人员的用户帐户。 如果多人正在迁移数据,请授予所有这些用户此访问权限。 选择用户帐户,然后使用 “选择” 保存所选内容。 选中用于分配对 用户、组或服务主体 的访问权限的选项,然后使用 “下一步” 继续。
在 “工作分配类型 ”选项卡上,将 “工作分配”类型 设置为 “活动 ”,并将 “工作分配持续时间 ”设置为 “永久”:
设置工作分配的类型为“活动”,并将分配持续时间设置为“永久”的截图,在 Azure 门户中。
选择 “审阅 + 分配 ”以转到“ 审阅 + 分配 ”选项卡,然后选择“ 审阅 + 分配 ”以完成角色分配。
授予托管标识对存储帐户的访问权限
预配 SQL 托管实例后,需要为 SQL 托管实例分配 Storage 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';
配置源SQL Server数据库
如果计划在迁移后在目标SQL 托管实例上使用这些功能,请在源SQL Server实例上启用加速数据库恢复和 Service Broker,因为如果尚未在源SQL Server实例上启用这些功能,则无法在迁移后启用这些功能。
启用加速数据库恢复
对于 SQL Server 2019 及更高版本,请启用 accelerated 数据库恢复,并确保持久性版本存储 (PVS) 设置为 PRIMARY。 如果未在源SQL Server数据库上启用加速数据库恢复,则迁移数据库后无法在目标 SQL 托管实例上启用它。 如果未将永久性版本存储(PVS)设置为 PRIMARY,则可能会遇到目标 SQL 托管实例上的还原作问题。
对于 SQL Server 2017 和更早版本,不支持加速数据库恢复,因此不需要执行此步骤。
若要在源SQL Server数据库上正确配置加速数据库恢复,请执行以下步骤:
通过在SQL Server上运行以下Transact-SQL脚本来启用加速数据库恢复:
ALTER DATABASE [<database name>] SET ACCELERATED_DATABASE_RECOVERY = ON;永久性版本存储(PVS)必须设置为
PRIMARY源数据库,这是默认配置。 如果之前已更改,则必须在开始迁移之前 将其更改回 PRIMARY 。
启用 Service Broker
默认为所有版本的 SQL Server 启用 Service Broker。 如果 Service Broker 已禁用,并且你计划在SQL 托管实例上使用,请在迁移到SQL 托管实例之前在源SQL Server数据库上启用 Service Broker。 如果未在源SQL Server数据库上启用 Service Broker,则无法在目标 SQL 托管实例上使用它。
若要检查 Service Broker 是否已启用,请在 SQL Server 实例上运行以下Transact-SQL脚本:
SELECT name AS [Database Name], is_broker_enabled AS [Service Broker Enabled]
FROM sys.databases
WHERE name = '<database name>';
如果禁用 Service Broker,请在源SQL Server数据库上运行以下Transact-SQL脚本来启用它:
USE master;
GO
ALTER DATABASE [<database name>]
SET ENABLE_BROKER;
GO
将备份上传到Blob 存储帐户
Blob 容器准备就绪并且已确认 SQL 托管实例可以访问容器时,可以开始将备份上传到Azure Blob 存储帐户。 将所有备份上传到存储帐户后,即可继续迁移。
将备份上传到Azure:
- 在SQL Server实例上执行备份。
- 将备份复制到Blob 存储帐户。
- 或者,Windows Server 上的 SQL Server 2025 (17.x) 引入了对托管标识的支持,允许将备份直接传输到 URL。 要将 SQL Server 2022 及更早版本直接备份到 URL,您必须使用 SAS 令牌。 若要将托管标识与 SQL Server 2022 及更早版本配合使用,请使用 AzCopy 将备份复制到 Blob 存储 帐户。 唯一的例外是,从 Azure VM 上的SQL Server迁移,该 VM 支持从
SQL Server 2022 CU 170 开始直接备份到具有托管标识身份验证的 URL。
请考虑采用以下最佳做法:
- 使用备份
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门户的迁移。
迁移到业务关键服务层级时的限制
迁移到 Business Critical 服务层级中的SQL 托管实例时,请考虑以下限制:
- 迁移大型数据库时,可能会遇到相当大的停机时间,因为在切换后,数据库会不可用,此时正在同步到 业务关键 服务层的次要副本。 有关解决方法,请参阅更长时间的直接转换部分。
- 如果计划外故障转移、系统更新或安全修补程序中断迁移,则迁移会自动从头开始重启。 这种限制使得难以规划出可预测的迁移计划,并避免在最后一刻出现意外。
重要
这些限制仅适用于迁移到 Business Critical 服务层级中的Azure SQL 托管实例,而不适用于 General Purpose 服务层级。
业务关键服务层级中的较长切换时间
如果要迁移到 Business Critical 服务层级中的 SQL 托管实例,需要考虑在将数据库复制到次要副本时,使主副本的数据库联机的延迟。 对于较大的数据库,这种延迟尤其如此。
迁移到 SQL 托管实例 Business Critical 服务层级需要比常规用途服务层级更长的时间才能完成。 切换到 Azure 完成后,数据库将不可用,直到从主副本同步到三个次要副本。 播种过程可能需要较长时间,具体取决于数据库的大小。 数据库越大,播种到次要副本耗时更长,可能需要长达数小时的时间。
如果希望数据库在切换完成后立即可用,请考虑以下备用方案:
- 首先迁移到“常规用途”服务层级,然后升级到 “业务关键 ”服务层级。 升级服务层级是一项联机操作,它使数据库保持联机状态,直到短暂的故障转移(这是在升级操作的最后一步)。
- 使用 托管实例 链接在线迁移到 Business Critical 实例,而无需等待数据库在切换后可用。
通过 Azure 门户监视迁移仅适用于符合监视许可要求的 SQL Server 实例。
排查常见问题
若要排查迁移到 Azure SQL 托管实例 时的常见问题,请参阅 排查迁移问题。