Skip to content

Latest commit

 

History

History
124 lines (97 loc) · 19 KB

File metadata and controls

124 lines (97 loc) · 19 KB
title Migration Dashboard
description Track the SQL Server estate migration journey in the Azure Arc center.
author ajithkr-ms
ms.author ajithkr
ms.reviewer mikeray
ms.date 06/30/2025
ms.topic how-to

Track migration journey by using migration dashboard - SQL Server enabled by Azure Arc

[!INCLUDE sqlserver]

The migration dashboard is a convenient view that shows all instances of [!INCLUDE ssazurearc] and their migration readiness. [!INCLUDE ssazurearc] automatically produces an assessment for migration to Azure. This assessment plays a vital role in the success of your cloud migration and modernization journey. With this dashboard, you can track the migration journey at scale. The readiness is projected as properties into the Azure management plane, which allows the use of organizational, tagging, and querying capabilities native to Azure.

The dashboard provides:

  • An overview of discovered SQL Server instances and databases.
  • An overview of the SQL Server instances with generated assessments.
  • A migration-readiness summary for each Azure SQL offering.
  • Rich filtering capabilities that you can use to tailor the view to your needs.

Review migration assessment

You can access the migration dashboard in the following ways:

  • In the Azure portal, search for Azure Arc and go to the Azure Arc center.
  • On the left pane, expand Data services and go to SQL Server instances.
  • Select the Migration Dashboard tab.

:::image type="content" source="media/migration-assessment/migration-dashboard.png" alt-text="Screenshot that shows the migration dashboard for SQL Server enabled by Azure Arc." lightbox="media/migration-assessment/migration-dashboard.png":::

Summary of discovered SQL Server instances and databases

The first section of the dashboard provides an overview of all SQL Server instances and databases that are accessible to you. You can also see the distribution of the instances by version and edition.

:::image type="content" source="media/migration-assessment/dashboard-inventory.png" alt-text="Screenshot that shows the migration dashboard showing SQL Server instances and databases and distribution by version and edition." lightbox="media/migration-assessment/dashboard-inventory.png":::

Summary of SQL Server migration assessment

This section of the dashboard provides you with an overview of the migration assessment and migration readiness of the instances of [!INCLUDE ssazurearc]. You can see how many instances have assessments available. The migration readiness for each Azure SQL offering is shown separately.

:::image type="content" source="media/migration-assessment/dashboard-assessment-overview.png" alt-text="Screenshot that shows the migration dashboard with an overview of migration assessments and readiness of instances and databases for Azure SQL offerings." lightbox="media/migration-assessment/dashboard-assessment-overview.png":::

Azure Resource Graph query

Azure Resource Graph provides efficient and performant means to query the readiness properties of the SQL Server instances enabled by Azure Arc. Here are some sample queries.

resources
 | where type == 'microsoft.azurearcdata/sqlserverinstances'
 | where properties.migration.assessment.assessmentUploadTime > ago(14d) and properties.migration.assessment.enabled == true and isnotnull(parse_json(properties.migration.assessment.skuRecommendationResults))
 | extend azureSqlDatabaseRecommendationStatus = tostring(properties.migration.assessment.skuRecommendationResults.azureSqlDatabase.recommendationStatus)
 | extend azureSqlManagedInstanceRecommendationStatus = tostring(properties.migration.assessment.skuRecommendationResults.azureSqlManagedInstance.recommendationStatus)
 | extend azureSqlVirtualMachineRecommendationStatus = tostring(properties.migration.assessment.skuRecommendationResults.azureSqlVirtualMachine.recommendationStatus)
 | extend serverAssessments = tostring(properties.migration.assessment.serverAssessments)
 | extend subscriptionId = extract(@"/subscriptions/([^/]+)", 1, id)
 | extend resourceGroup = extract(@"/resource[g/G]roups/([^/]+)", 1, id)
 | mv-expand platformStatus = pack_array(
     pack("platform", "Azure SQL Database", "status", azureSqlDatabaseRecommendationStatus),
     pack("platform", "Azure SQL Managed Instance", "status", azureSqlManagedInstanceRecommendationStatus),
     pack("platform", "Azure SQL Virtual Machine", "status", azureSqlVirtualMachineRecommendationStatus)
   )
 | extend platformIncludedString = strcat('"AppliesToMigrationTargetPlatform":', strcat('"', replace(" ", "", tolower(tostring(platformStatus["platform"]))), '"'))
 | extend platformHasIssues = tolower(serverAssessments) has tolower(platformIncludedString)
 | project Platform = tostring(platformStatus["platform"]), status = tostring(platformStatus["status"]), tostring(serverAssessments), id, platformHasIssues
 | extend finalStatus = case(
     status == "Ready" and platformHasIssues, "Ready with Conditions",
     status == "Ready", "Ready",
     status == "NotReady", "NotReady",
     isnull(status) or status !in ("Ready", "NotReady", "Ready with Conditions"), "Unknown",
     "Unknown")
 | summarize TotalAssessed = count(), Ready = countif(finalStatus == "Ready"), NotReady = countif(finalStatus == "NotReady"),
     ReadyWithConditions = countif(finalStatus == "Ready with Conditions"), Unknown = countif(finalStatus == "Unknown")
     by Platform
az graph query -q "resources | where type =~ 'microsoft.hybridcompute/machines' | extend machineId = tolower(tostring(id)), datacenter = iif(isnull(tags.Datacenter), '', tags.Datacenter), status = tostring(properties.status) | extend mssqlinstalled = coalesce(tobool(properties.detectedProperties.mssqldiscovered),false) | extend pgsqlinstalled = coalesce(tobool(properties.detectedProperties.pgsqldiscovered),false) | extend mysqlinstalled = coalesce(tobool(properties.detectedProperties.mysqldiscovered),false) | extend osSku = properties.osSku, osName = properties.osName, osVersion = properties.osVersion | extend coreCount = tostring(properties.detectedProperties.logicalCoreCount), totalPhysicalMemoryinGB = tostring(properties.detectedProperties.totalPhysicalMemoryInGigabytes)  | extend operatingSystem = iif(isnotnull(osSku), osSku, osName) | where mssqlinstalled or mysqlinstalled or pgsqlinstalled | project id ,name, type, resourceGroup, subscriptionId, location, kind, osVersion, status, osSku,coreCount,totalPhysicalMemoryinGB,tags, mssqlinstalled, mysqlinstalled, pgsqlinstalled | sort by (tolower(tostring(name))) asc"
Search-AzGraph -Query @"
resources
| where type =~ 'microsoft.hybridcompute/machines'
| extend machineId = tolower(tostring(id))
| extend datacenter = iif(isnull(tags.Datacenter), '', tags.Datacenter)
| extend status = tostring(properties.status)
| extend mssqlinstalled = coalesce(tobool(properties.detectedProperties.mssqldiscovered), false)
| extend pgsqlinstalled = coalesce(tobool(properties.detectedProperties.pgsqldiscovered), false)
| extend mysqlinstalled = coalesce(tobool(properties.detectedProperties.mysqldiscovered), false)
| extend osSku = properties.osSku
| extend osName = properties.osName
| extend osVersion = properties.osVersion
| extend coreCount = tostring(properties.detectedProperties.logicalCoreCount)
| extend totalPhysicalMemoryinGB = tostring(properties.detectedProperties.totalPhysicalMemoryInGigabytes)
| extend operatingSystem = iif(isnotnull(osSku), osSku, osName)
| where mssqlinstalled or mysqlinstalled or pgsqlinstalled
| project id, name, type, resourceGroup, subscriptionId, location, kind, osVersion, status, osSku, coreCount, totalPhysicalMemoryinGB, tags, mssqlinstalled, mysqlinstalled, pgsqlinstalled
| sort by (tolower(tostring(name))) asc
"@

Related content