Azure PowerShell - Извлечение Azure SQL Информация о базе данных - PullRequest
0 голосов
/ 23 апреля 2020

Я ищу способ извлечения указанной c информации о 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-AzMetri c, чтобы извлечь что-то, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Спасибо, Адам, ты указал мне в нужное место. Думаю, мой первый подход к извлечению этих данных был неверным. Я также обнаружил некоторые проблемы с 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
    }
}
0 голосов
/ 23 апреля 2020

Максимальный размер базы данных можно получить с помощью командлета Get-AzureRmSqlDatabase (из модуля AzureRM. Sql). Командлет возвращает объект AzureSqlDatabaseModel, который включает свойство MaxSizeBytes.

Чтобы получить ВСЕ точки данных, которые вы запрашивали, извлеките командлет Get-AzureRmMetri c. Он позволяет запрашивать определенные c метрики для ресурса Azure, такого как ASD. Список метрик, организованных по ресурсам, можно найти в статье Поддерживаемые метрики с Azure Монитор в разделе Microsoft.Sql/servers/databases. Я полагаю, что следующие метрики соответствуют тому, что вы ищете ...

  • Использованное пространство => storage_percent
  • Выделенное пространство => alloc_data_storage
  • Максимальный размер хранилища => хранилище

Вы бы запросили у метри c что-то вроде следующего:

$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

Я извлекаю размер базы данных здесь, но вы можете получить любой метрик в вашем списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...