如何仅通过名称获取Azure SQL故障转移组并实现主副切换?
解决Azure SQL故障转移组双向切换问题
核心方案:仅通过故障转移组名称自动定位并切换
步骤1:遍历订阅内SQL服务器,查找目标故障转移组
由于Get-AzSqlDatabaseFailoverGroup需要指定服务器和资源组,我们可以先获取当前订阅下所有SQL服务器,再逐个查询故障转移组匹配目标名称:
$failoverGroupName = "你的故障转移组名称" # 获取当前订阅下所有SQL服务器实例 $sqlServers = Get-AzSqlServer # 遍历服务器查找目标故障转移组 $targetFailoverGroup = $null foreach ($server in $sqlServers) { $failoverGroups = Get-AzSqlDatabaseFailoverGroup -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName $matchedGroup = $failoverGroups | Where-Object { $_.FailoverGroupName -eq $failoverGroupName } if ($matchedGroup) { $targetFailoverGroup = $matchedGroup break } } if (-not $targetFailoverGroup) { Write-Error "未找到指定名称的故障转移组" exit }
步骤2:识别当前辅助服务器
从故障转移组信息中,筛选出ReplicationRole为Secondary的服务器,这就是需要切换为主的目标:
$secondaryServer = $targetFailoverGroup.PartnerServers | Where-Object { $_.ReplicationRole -eq "Secondary" } if (-not $secondaryServer) { Write-Error "未找到故障转移组中的辅助服务器" exit }
步骤3:执行双向故障转移切换
调用Switch-AzSqlDatabaseFailoverGroup完成角色互换:
Switch-AzSqlDatabaseFailoverGroup ` -ResourceGroupName $secondaryServer.ResourceGroupName ` -ServerName $secondaryServer.ServerName ` -FailoverGroupName $failoverGroupName
替代方案:通过App Service主机名定位资源组后处理
步骤1:通过主机名获取App Service资源
$appServiceHostname = "你的App Service主机名(如xxx.azurewebsites.net)" # 获取匹配主机名的App Service $appService = Get-AzWebApp | Where-Object { $_.DefaultHostName -eq $appServiceHostname } if (-not $appService) { Write-Error "未找到指定主机名的App Service" exit }
步骤2:获取该资源组内的SQL服务器
$sqlServersInRG = Get-AzSqlServer -ResourceGroupName $appService.ResourceGroupName
步骤3:查找目标故障转移组并执行切换
参考核心方案的步骤1-3,从该资源组的SQL服务器中定位故障转移组,再完成双向切换操作。
内容的提问来源于stack exchange,提问作者Don Chambers
相关产品推荐
相关产品推荐

