【问题标题】:Azure PowerShell - Extracting Azure SQL Database informationAzure PowerShell - 提取 Azure SQL 数据库信息
【发布时间】:2020-08-06 19:18:14
【问题描述】:

我正在寻找一种方法来提取有关 Azure SQL 数据库的特定信息:已用空间、已分配空间和最大存储大小。我知道 Azure 门户提供了这些信息,但我想使用 PowerShell 来提取它。我已经设法使用下面的命令提取了一点信息“最大存储大小”,但我找不到其他需要的信息。

提取数据库容量信息的代码(最大存储大小)

Get-AzSqlDatabase -ServerName $ServerName -ResourceGroupName $ResourceGroupName | Select-Object ServerName, DatabaseName, @{Name="MaxSizeGB";Expression={$_.MaxSizeBytes/1GB}}

我知道可以使用 T-SQL 获得该信息,但连接到每个服务器以运行 T-SQL 在这种情况下是不可能的。 https://docs.microsoft.com/en-us/azure/sql-database/sql-database-file-space-management

有谁知道是否有其他选择可以使用 Azure PowerShell 提取该信息?我尝试使用 Get-AzMetric 命令提取某些内容,但没有成功。

【问题讨论】:

  • 如果您的 SQL 数据库存储在弹性池中,请小心。

标签: powershell azure-sql-database azure-powershell ss


【解决方案1】:

谢谢,Adam,您指出了我正确的位置,我认为我提取该数据的第一种方法是不正确的。我还发现了我在使用过程中使用的 Azure PowerShell 版本的一些问题,并将其报告给 Microsoft 支持。

Get-AzResource -ResourceGroupName 'Test' -name 'ServerName/DatabaseName'

不能正常工作,但如果你删除 ServerName 就可以工作。

Get-AzResource -ResourceGroupName 'test' -name 'DatabaseName'

我提取数据库所需数据的最终代码:

Connect-AzAccount

$OutData = @()
$IgnoreDB = @('master', 'SSISDB')

$Subscription = Get-AzSubscription | Out-GridView -OutputMode 'Single'
if($Subscription){
    $Subscription | Select-AzSubscription

    $AzSqlServer = Get-AzSqlServer | Out-GridView -OutputMode Multiple
    if($AzSqlServer)
    {
        Foreach ($server in $AzSqlServer)
        {
            $SQLDatabase = Get-AzSqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName | Where-Object { $_.DatabaseName -notin $IgnoreDB }
            Foreach ($database in $SQLDatabase)
            {
                $db_resource = Get-AzResource -ResourceId $database.ResourceId

                # Database maximum storage size
                $db_MaximumStorageSize = $database.MaxSizeBytes / 1GB

                # Database used space
                $db_metric_storage = $db_resource | Get-AzMetric -MetricName 'storage'
                $db_UsedSpace = $db_metric_storage.Data.Maximum | Select-Object -Last 1
                $db_UsedSpace = [math]::Round($db_UsedSpace / 1GB, 2)

                # Database used space procentage
                $db_metric_storage_percent = $db_resource | Get-AzMetric -MetricName 'storage_percent'
                $db_UsedSpacePercentage = $db_metric_storage_percent.Data.Maximum | Select-Object -Last 1

                # Database allocated space
                $db_metric_allocated_data_storage = $db_resource | Get-AzMetric -MetricName 'allocated_data_storage'
                $db_AllocatedSpace = $db_metric_allocated_data_storage.Data.Average | Select-Object -Last 1
                $db_AllocatedSpace = [math]::Round($db_AllocatedSpace / 1GB, 2) 

                # Database VCore
                $db_VCoreMin = $db.MinimumCapacity
                $db_VCoreMax = $db.Capacity

                $Report = New-Object PSObject
                $Report | Add-Member -Name "ServerName" -MemberType NoteProperty -Value $server.ServerName
                $Report | Add-Member -Name "DatabaseName" -MemberType NoteProperty -Value $database.DatabaseName
                $Report | Add-Member -Name "UsedSpace" -MemberType NoteProperty -Value $db_UsedSpace
                $Report | Add-Member -Name "UsedSpaceProcentage" -MemberType NoteProperty -Value $db_UsedSpacePercentage
                $Report | Add-Member -Name "AllocatedSpace" -MemberType NoteProperty -Value $db_AllocatedSpace
                $Report | Add-Member -Name "MaximumStorageSize" -MemberType NoteProperty -Value $db_MaximumStorageSize
                $Report | Add-Member -Name "MinvCores" -MemberType NoteProperty -Value $db_VCoreMin
                $Report | Add-Member -Name "MaxvCores" -MemberType NoteProperty -Value $db_VCoreMax
                $OutData += $Report

            }
        }
        $OutData | Out-GridView
    }
}

【讨论】:

    【解决方案2】:

    您可以使用Get-AzureRmSqlDatabase commandlet(来自 AzureRM.Sql 模块)获取数据库的最大大小。命令行开关返回一个 AzureSqlDatabaseModel 对象,其中包括一个 MaxSizeBytes 属性。

    要获得您要求的所有数据点,请查看 Get-AzureRmMetric 命令行开关。它允许您查询 Azure 资源的特定指标,例如 ASD。您可以在文章中找到按资源组织的指标列表 Supported metrics with Azure MonitorMicrosoft.Sql/servers/databases 部分下。我相信以下将指标映射到您正在寻找的内容...

    • 已用空间 => storage_percent
    • 分配空间 => 分配数据存储
    • 最大存储大小 => 存储

    您可以使用以下内容查询指标:

    $my_db = Get-AzureRmResource -ResourceGroupName "..." -Name "server/dbname"
    $my_db_metric_storage = $my_db | Get-AzureRmMetric -MetricName 'storage'
    $my_db_size_bytes = $my_db_metric_storage.Data[$my_db_metric_storage.Data.Count - 2].Maximum
    $my_db_size_bytes / 1KB
    

    我在这里提取数据库大小,但您可以获取列表中的任何指标。

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多