| 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 |
[!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.
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":::
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":::
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 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 Platformaz 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
"@
- Assess migration readiness - SQL Server enabled by Azure Arc
- Assessment rules for SQL Server to Azure SQL Managed Instance migration
- Assessment rules for SQL Server to Azure SQL Database migration
- Migrate SQL Server to Azure SQL
- SQL Server enabled by Azure Arc
- Deployment options for SQL Server enabled by Azure Arc