如何在不同Azure SQL Server间迁移Azure弹性池
Azure弹性池跨SQL Server迁移方案(同/跨订阅)
Azure弹性池无法直接从一台SQL Server“移动”到另一台,需通过迁移池内数据库+在目标服务器重建弹性池的方式实现,以下是具体操作方案:
一、同订阅场景
手动操作(Azure门户)
- 先在目标SQL Server上创建和原弹性池配置(DTU/vCore规格、存储上限、池规则等)完全一致的新弹性池
- 处理原池里的每个数据库:
- 可选:暂停数据库自动备份,避免迁移期间备份冲突
- 要么用异地复制或时点还原把数据库同步到目标弹性池;要么直接把数据库从原池移出(转为单数据库),再加入目标弹性池(注意目标池配置需兼容)
- 验证所有数据库在目标池内的可用性与数据一致性
- 修改应用连接字符串为目标服务器地址,确认业务正常后删除原弹性池
批量操作(Azure CLI/PowerShell)
用PowerShell示例:
- 创建目标弹性池:
New-AzSqlElasticPool -ResourceGroupName "目标资源组名" -ServerName "目标SQL服务器名" -ElasticPoolName "目标弹性池名" -Edition "GeneralPurpose" -VCore 4 -StorageMB 32768
- 遍历原池数据库,逐个迁移:
$databases = Get-AzSqlElasticPoolDatabase -ResourceGroupName "原资源组名" -ServerName "原SQL服务器名" -ElasticPoolName "原弹性池名" foreach ($db in $databases) { # 从原弹性池移出,转为单数据库 Set-AzSqlDatabase -ResourceGroupName "原资源组名" -ServerName "原SQL服务器名" -DatabaseName $db.DatabaseName -ElasticPoolName $null # 加入目标弹性池 Set-AzSqlDatabase -ResourceGroupName "目标资源组名" -ServerName "目标SQL服务器名" -DatabaseName $db.DatabaseName -ElasticPoolName "目标弹性池名" }
- 检查迁移后的数据库状态,更新应用连接串
二、跨订阅场景
跨订阅迁移核心是先将数据库复制到目标订阅的SQL服务器,再加入新建弹性池,两种常用方法:
跨订阅数据库复制
- 在目标订阅的SQL服务器上创建匹配配置的弹性池
- 配置原服务器与目标服务器的防火墙规则,确保双向访问权限
- 对原池内每个数据库启动跨订阅复制,复制完成后终止复制关系,将副本数据库加入目标弹性池
- 验证数据一致性,切换应用连接串,清理原资源
导出/导入备份
- 将原池内每个数据库导出到Azure存储账户(跨订阅需给目标订阅配置存储账户的RBAC访问权限)
- 在目标订阅的SQL服务器弹性池中,从存储账户导入数据库备份文件
- 检查导入后的数据库状态,更新应用连接信息
关键注意点
- 迁移前必须备份所有数据库,防止数据丢失
- 跨订阅迁移时需确认资源组、SQL服务器、存储账户的权限配置,保证跨订阅访问正常
- 迁移过程会有短暂停机,建议选择业务低峰期操作
- 迁移后需将原弹性池的配套设置(防火墙规则、审计策略、透明数据加密等)同步到目标服务器和弹性池
内容的提问来源于stack exchange,提问作者Aryan
相关产品推荐
相关产品推荐

