You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一租户内Azure SQL数据库跨订阅低停机迁移方案咨询

跨订阅Azure SQL数据库低停机迁移方案(适配多资源组需求)

可行方案:Azure SQL异地复制跨订阅实现

同一租户下,Azure SQL数据库异地复制完全支持跨订阅,你之前的命令缺少关键的PartnerSubscriptionId参数,导致跨订阅配置失败。以下是完整的实施步骤和修正后的操作:

1. 前置准备

  • 订阅B中已创建好目标资源组、SQL服务器及弹性池(按需)
  • 操作账号需具备以下RBAC权限:
    • 订阅A:SQL Server参与者、SQL数据库参与者
    • 订阅B:SQL Server参与者、SQL数据库参与者、对应资源组参与者
  • 确认主数据库与目标服务器的服务层级(如GP/BC)、区域兼容

2. 修正后的跨订阅复制PowerShell命令

# 配置参数
$primarySubId = "YOUR-SUB-A-ID"
$secondarySubId = "YOUR-SUB-B-ID"
$primaryRG = "primary-resource-group"
$primaryServer = "primary-sql-server"
$secondaryRG = "target-resource-group"
$secondaryServer = "target-sql-server"
$dbName = "database-to-migrate"
$targetPool = "target-elastic-pool"
$backupRedundancy = "Local"

# 切换到主订阅上下文
Set-AzContext -Subscription $primarySubId

# 创建跨订阅副本
New-AzSqlDatabaseSecondary `
    -PartnerSubscriptionId $secondarySubId `
    -PartnerResourceGroupName $secondaryRG `
    -PartnerServerName $secondaryServer `
    -PartnerDatabaseName $dbName `
    -SecondaryElasticPoolName $targetPool `
    -ResourceGroupName $primaryRG `
    -ServerName $primaryServer `
    -DatabaseName $dbName `
    -BackupStorageRedundancy $backupRedundancy `
    -AllowConnections "All"

3. 批量迁移脚本(适配600+数据库、多资源组)

针对大量数据库及多目标资源组的场景,可通过循环实现批量配置:

# 筛选要迁移的数据库(排除系统库)
$primarySubId = "YOUR-SUB-A-ID"
$secondarySubId = "YOUR-SUB-B-ID"
$primaryRG = "primary-resource-group"
$primaryServer = "primary-sql-server"

Set-AzContext -Subscription $primarySubId
$targetDbs = Get-AzSqlDatabase -ResourceGroupName $primaryRG -ServerName $primaryServer | Where-Object {
    $_.DatabaseName -notin @("master", "model", "msdb", "tempdb")
}

foreach ($db in $targetDbs) {
    # 根据业务规则分配目标资源组/服务器/弹性池(示例:按DB前缀分组)
    if ($db.DatabaseName.StartsWith("Group1_")) {
        $secondaryRG = "target-rg-group1"
        $secondaryServer = "target-sql-group1"
        $targetPool = "pool-group1"
    } elseif ($db.DatabaseName.StartsWith("Group2_")) {
        $secondaryRG = "target-rg-group2"
        $secondaryServer = "target-sql-group2"
        $targetPool = "pool-group2"
    }

    # 创建副本
    New-AzSqlDatabaseSecondary `
        -PartnerSubscriptionId $secondarySubId `
        -PartnerResourceGroupName $secondaryRG `
        -PartnerServerName $secondaryServer `
        -PartnerDatabaseName $db.DatabaseName `
        -SecondaryElasticPoolName $targetPool `
        -ResourceGroupName $primaryRG `
        -ServerName $primaryServer `
        -DatabaseName $db.DatabaseName `
        -BackupStorageRedundancy "Local" `
        -AllowConnections "All"

    # 等待副本同步完成
    do {
        Set-AzContext -Subscription $secondarySubId
        $secondaryDb = Get-AzSqlDatabase -ResourceGroupName $secondaryRG -ServerName $secondaryServer -DatabaseName $db.DatabaseName
        Start-Sleep -Seconds 30
        Set-AzContext -Subscription $primarySubId
    } while ($secondaryDb.ReplicationState -ne "CATCH_UP")

    # 执行无数据丢失故障转移(停机时间仅几秒)
    Set-AzContext -Subscription $secondarySubId
    Failover-AzSqlDatabase `
        -ResourceGroupName $secondaryRG `
        -ServerName $secondaryServer `
        -DatabaseName $db.DatabaseName `
        -AllowDataLoss $false
}

方案核心优势

  • 超低停机:故障转移仅需几秒,迁移期间副本可接受只读请求(通过AllowConnections参数控制)
  • 灵活适配:支持将数据库分散到不同资源组/服务器,满足你的多目标部署需求
  • 无需导出导入:规避了存储账户操作的繁琐流程,节省时间成本

常见问题排查

  • 权限报错:确认操作账号在两个订阅中均拥有Microsoft.Sql/servers/databases/write等核心权限
  • 副本创建失败:检查主库与目标服务器的服务层级、区域是否匹配,目标弹性池容量是否充足

内容的提问来源于stack exchange,提问作者Wesley Neves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:53:26