本文介绍如何使用托管实例链接将 SQL Server 数据库迁移到 Azure SQL 托管实例。
概述
托管实例链接支持从在任何位置托管的 SQL Server 迁移到 Azure SQL 托管实例。 该链接使用 Always On 可用性组技术以几乎实时地方式将更改从主 SQL Server 实例复制到辅助 SQL 托管实例。 此链接提供 SQL Server 与 Azure SQL 托管实例之间唯一真正联机的迁移选项,因为唯一的停机时间发生在切换到目标 SQL 托管实例期间。
使用链接进行迁移让你能够:
- 在完成到 Azure 的迁移之前,能够在 SQL 托管实例上测试只读工作负载。
- 能够确保链接和迁移根据需要持续运行,可以是几周,甚至几个月。
- 准实时复制数据,提供到 Azure 的最快可用数据复制。
- 与目前可用的所有其他解决方案相比,其迁移导致的停机时间最短。
- 即时直接转换到目标 SQL 托管实例。
- 能够在准备就绪时随时进行迁移。
- 能够将单个或多个数据库从单个或多个 SQL Server 实例迁移到 Azure 中的相同或多个 SQL 托管实例。
- 以唯一真正联机的方式迁移到业务关键服务层级。
注意
虽然每个链接只能迁移一个数据库,但可以建立从同一 SQL Server 实例到同一SQL 托管实例的多个链接。
切换行为
直接转换行为取决于要从中迁移的SQL Server版本,以及目标SQL 托管实例的更新策略:
- 对于 SQL Server 2016 到 SQL Server 2019,切换到 SQL 托管实例 会断开该链接。
- 对于 SQL Server 2022 或更高版本,切换到 SQL 托管实例 时,可以根据你在故障转移期间的选择删除链接或保留链接。 如果选择保留链接,并且 SQL 托管实例配置了匹配的更新策略,则可以根据需要反向迁移到SQL Server。
对于迁移,建议删除链接。 如果选择保留链接,但后来决定将其删除,请等待Azure在故障转移后完成数据库的第一次完整备份,然后再删除该链接。 此步骤可确保数据库在SQL 托管实例正常运行。 它还有助于避免一个罕见的已知问题,如果链接太早删除,数据库在服务器重启后可能会暂时不可用。 有关详细信息,请参阅 MI 链接故障转移后,服务器重启,数据库变为不可用。
反向迁移
根据 SQL 托管实例的 更新策略 ,可能会支持从 Azure SQL 托管实例反向迁移到 SQL Server。 例如:
- SQL Server 2022 更新策略:可以使用 SQL Server 2022 更新策略配置的实例中的数据库还原回 SQL Server 2022 实例。
- SQL Server 2025 更新策略:可以使用 SQL Server 2025 更新策略配置的实例中的数据库还原回 SQL Server 2025 实例。
如果源 SQL Server 版本早于 SQL Server 2022,则无法进行反向迁移。 将数据库迁移到SQL 托管实例时,会进行内部升级到与早期SQL Server版本不兼容的较新的数据库版本。 仅当SQL 托管实例配置了相应的更新策略时,才能使用反向迁移数据库兼容性。
先决条件
若要使用 Azure SQL 托管实例的链接来进行迁移,需要满足以下先决条件:
- 有效的 Azure 订阅。 如果没有订阅,请创建一个试用帐户。
- 支持的 SQL Server 版本,安装了所需的服务更新。
评估和发现
验证你的源环境是否受支持后,开始预迁移阶段。 发现所有现有数据源,评估迁移可行性,确定可能会妨碍迁移的任何阻碍性问题。 在“发现”阶段,扫描网络以查明你的组织使用的所有 SQL Server 实例和功能。
可以使用以下工具来发现环境中的 SQL 源:
- Azure Arc 启用的 SQL Server:Azure Arc 启用的 SQL Server 会自动生成迁移到 Azure 的评估,从而简化迁移的发现过程和准备情况评估。
- Azure Migrate,用于评估本地服务器的迁移适用性,执行基于性能的大小调整,并为提供在 Azure 中运行服务器的成本估算。
- Microsoft 评估和规划工具包(“MAP 工具包”),用于评估你当前的 IT 基础结构。 该工具包提供了功能强大的清单、评估和报告工具,可以简化迁移规划过程。
发现数据源后,评估可迁移到 Azure SQL 托管实例的任何本地 SQL Server 实例,以确定是否存在迁移阻碍或兼容性问题。
创建目标实例
评估现有环境并确定目标 SQL 托管实例的相应服务层级和硬件配置后,请使用 Azure 门户、PowerShell 或 Azure CLI 部署目标实例。
配置链接
创建目标 SQL 托管实例后,在 SQL Server 实例和 Azure SQL 托管实例上配置数据库之间的链接。 首先,准备环境,然后使用 SQL Server Management Studio (SSMS) 或脚本配置链接。
检查复制延迟
在执行计划的迁移故障转移之前,次要副本必须赶上主副本。 如果次要副本远远落后于主副本,计划内故障转移可能会超时和失败。
对SQL Server和SQL 托管实例使用以下 T-SQL 查询监视副本之间的复制延迟:
-- Execute on SQL Server and SQL Managed Instance
USE master
DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
ag.name [Link name],
ars1.role_desc [Link role],
ars2.connected_state_desc [Link connected state],
ars2.synchronization_health_desc [Link sync health],
drs.secondary_lag_seconds [Link replication latency (seconds)]
FROM
sys.availability_groups ag
JOIN sys.dm_hadr_availability_replica_states ars1
ON ag.group_id = ars1.group_id
JOIN sys.dm_hadr_availability_replica_states ars2
ON ag.group_id = ars2.group_id
JOIN sys.dm_hadr_database_replica_states drs
ON ars2.replica_id = drs.replica_id
WHERE
ag.is_distributed = 1 AND ag.name = @link_name AND ars1.is_local = 1 AND ars2.is_local = 0
GO
如果复制滞后时间较高,请等待辅助副本赶上主副本。 如果滞后时间仍然存在(例如暂停主副本上的工作负荷、改善两个实例之间的链接网络吞吐量或增加辅助副本上的资源容量),则可能需要执行其他故障排除步骤。 停止SQL Server主副本上的工作负荷的最简单方法是切断与实例的应用程序连接。
迁移多个数据库
如果计划从同一服务器上的实例迁移多个数据库,以实现最佳性能和可预测性,请一次迁移每个实例 8 个数据库。 例如,如果每个实例有 10 个实例,每个实例有 32 个链接数据库,则每次使用计划的故障转移从每个实例迁移 8 个数据库,并重复此过程,直到迁移所有数据库。
数据同步和直接转换
建立链接并准备好迁移后,请遵循以下步骤(通常在维护时段):
- 停止主 SQL Server 数据库上的工作负载,使 SQL 托管实例上的辅助数据库能够跟上进度。 停止SQL Server主副本上的工作负荷的最简单方法是切断与实例的应用程序连接。
- 验证所有数据是否都已迁移到 SQL 托管实例上的辅助数据库。 检查 复制滞后 时间,确保辅助副本与主副本保持同步。
- 通过选择“计划的故障转移”,将链接故障转移到辅助 SQL 托管实例。
- (可选)选中在成功故障转移后删除链接 的框,确保故障转移为单向,并删除该链接。
- (可选)如果使用支持的 SQL Server 版本,并具备匹配的 SQL 托管实例更新策略,则可以在故障转移后保留链接,以便在需要时反向迁移。 查看 反向迁移部分 以了解特定版本详细信息。
- 直接转换应用程序,以连接至 SQL 托管实例终结点。
- (可选)如果未选择在故障转移期间删除链接,则可以在切换后且不再需要链接时将其删除。
验证迁移
切换到 SQL 托管实例目标后,监视应用程序、测试性能并修正任何问题。
迁移的已知问题
使用链接查看与迁移相关的以下已知问题。
服务器重启后,数据库在 MI 链接故障转移后变得不可用
在极少数情况下,链接发生故障转移后,如果服务器重新启动,您的数据库在 SQL 托管实例 上可能会暂时不可用。 如果在数据库初次故障转移到 SQL 托管实例 之后、Azure 完成该数据库的完整备份之前删除链接关系,就会出现此已知问题。
数据库在Microsoft干预后自动恢复,但此恢复可能需要一些时间。
为避免此问题,在从 SQL Server 故障转移到 SQL 托管实例 后首次完整备份完成之前,请不要断开该链接。 有关详细信息,请参阅 服务器重启后数据库不可用。
迁移到 SQL 托管实例后还原操作失败
如果您将启用了 加速数据库恢复 的 SQL Server 2019 及更高版本的数据库迁移到 Azure SQL 托管实例,但将永久性版本存储(PVS)配置为文件组以外的 PRIMARY,则可能会在目标 SQL 托管实例上遇到还原操作失败的情况。
若要解决此问题,请确保将源SQL Server数据库上的 persistent 版本存储(PVS)设置为 PRIMARY,然后再将其迁移到SQL 托管实例。 如果您已经在没有将 PVS 设置为 PRIMARY 的情况下迁移了数据库,可以在源 SQL Server 数据库上设置 PVS,然后重新迁移数据库到 SQL 托管实例。
迁移到SQL 托管实例后无法使用加速数据库恢复
从 SQL Server 2019 开始,如果将数据库迁移到 Azure SQL 托管实例,并且源数据库已禁用 加速数据库恢复 ,则无法在目标 SQL 托管实例上使用加速数据库恢复。
若要解决此问题,在将源SQL Server数据库迁移到SQL 托管实例之前,请确保可启用加速数据库恢复。 如果已在未启用加速数据库恢复的情况下迁移数据库,则可以在源 SQL Server 数据库上启用该数据库,然后将数据库重新迁移到 SQL 托管实例。
SQL Server 2017 和早期版本不支持加速数据库恢复,因此此问题不适用于从这些版本的 SQL Server 迁移的数据库。
迁移到 SQL 托管实例 后无法使用 Service Broker
如果将数据库迁移到 Azure SQL 托管实例,并且 源数据库上禁用 Service Broker,则无法在目标 SQL 托管实例上使用 Service Broker。
若要解决此问题,请确保在源SQL Server数据库上启用 Service Broker,然后再将其迁移到SQL 托管实例。 如果已在未启用 Service Broker 的情况下迁移数据库,则可以在源SQL Server数据库上启用它,然后将数据库重新迁移到SQL 托管实例。
相关内容
要使用该链接,请参阅以下内容:
要了解有关该链接的详细信息,请参阅以下内容:
对于其他复制和迁移方案,请考虑: