如何使用Azure PowerShell命令Get-AzureRMSqlDatabase确定SQL数据库复制角色

时间:2016-08-08 15:30:21

标签: azure-sql-database azure-powershell

使用Azure Resource Manager PowerShell命令,是否有一种简单的方法可以判断数据库是否作为主要或辅助参与地理复制角色?我曾经读过Get-AzureSqlDatabase返回的Status属性,值为0表示数据库是Primary。但是,Get-AzureRMSqlDatabase没有返回相应的属性;它仍然返回一个状态列,但值为" Online"主数据库和辅助数据库。

我需要这个的原因是我试图在多个订阅和服务器上维护数十个数据库,而我正在尝试自动执行仅应在主数据库上执行的操作。

1 个答案:

答案 0 :(得分:2)

我找到了解决此问题的合理方法,每个数据库进行一次额外调用。命令行开关Get-AzureRmSqlDatabaseReplicationLink完全符合我的需要,但有一点需要注意;我知道我不应该传递与ResourceGroupName和PartnerResourceGroupName相同的值,但它似乎有效(至少目前为止),所以我要使用它以避免不得不拨打一个电话订阅中的每个资源组。

使用它,我能够创建这个简单的功能:

Function IsSecondarySqlDatabase {
    # This function determines whether specified database is performing a secondary replication role.
    # You can use the Get-AzureRMSqlDatabase command to get an instance of a [Microsoft.Azure.Commands.Sql.Database.Model.AzureSqlDatabaseModel] object.
    param
    (
        [Microsoft.Azure.Commands.Sql.Database.Model.AzureSqlDatabaseModel] $SqlDB
    )
    process {
        $IsSecondary = $false;
        $ReplicationLinks = Get-AzureRmSqlDatabaseReplicationLink `
            -ResourceGroupName $SqlDB.ResourceGroupName `
            -ServerName $SqlDB.ServerName `
            -DatabaseName $SqlDB.DatabaseName `
            -PartnerResourceGroupName $SqlDB.ResourceGroupName
        $ReplicationLinks | ForEach-Object -Process `
        {
            if ($_.Role -ne "Primary")
            {
                $IsSecondary = $true
            }
        }
        return $IsSecondary
    }
}