Azure SQL Data Sync is a powerful service that enables data synchronization between multiple databases across Azure SQL Database and on‑premises SQL Server environments. It supports hybrid architectures and distributed applications by allowing selected data to synchronize bi‑directionally between hub and member databases using a hub‑and‑spoke topology.
However, one of the most common operational challenges faced by support engineers and customers using Azure SQL Data Sync is:
❗ Lack of proactive monitoring for sync failures or errors
By default, Azure SQL Data Sync does not provide native alerting mechanisms that notify administrators when synchronization operations fail or encounter issues. This can result in silent data drift or synchronization delays that may go unnoticed in production environments.
In this blog, we’ll walk through how to monitor Azure SQL Data Sync activity and detect synchronization errors using Azure PowerShell commands.
Why Monitoring Azure SQL Data Sync Matters
Azure SQL Data Sync works by synchronizing data between:
- Hub Database (must be Azure SQL Database)
- Member Databases (Azure SQL Database or SQL Server)
- Sync Metadata Database (stores sync configuration and logs)
All synchronization activity—including errors, failures, and successes—is logged internally within the Sync Metadata Database and exposed through Azure SQL Sync Group logs.
Monitoring these logs enables:
- Detection of sync failures
- Identification of schema mismatches
- Validation of sync completion
- Troubleshooting of sync group issues
- Verification of last successful sync activity
Prerequisites
Before monitoring Azure SQL Data Sync activity, ensure the following:
- Azure PowerShell module (Az.Sql) is installed
- You have access to the Azure SQL Data Sync resources
- Proper authentication and subscription context are configured
Install and import the required module if not already available:
# Install Azure PowerShell module if not already installed
Install-Module -Name Az -Repository PSGallery -Force
# Import the SQL module
Import-Module Az.Sql
Authenticate to Azure:
# Login to Azure
Connect-AzAccount -TenantId "<tenant-id>"
# Set subscription context
Set-AzContext -SubscriptionId "<subscription-id>"
These commands enable access to Azure SQL Sync Group monitoring operations.
Monitoring Sync Group Status
To retrieve Sync Group details, define the required variables:
# Define variables
$resourceGroup = "rg-datasync-demo"
$serverName = "<hub-server-name>"
$databaseName = "HubDatabase"
$syncGroupName = "SampleSyncGroup"
# Get sync group details
Get-AzSqlSyncGroup -ResourceGroupName $resourceGroup `
-ServerName $serverName `
-DatabaseName $databaseName `
-SyncGroupName $syncGroupName | Format-List
Note:
The LastSyncTime property returned by Get-AzSqlSyncGroup may sometimes display a value such as 1/1/0001, even when synchronization operations are completing successfully.
To obtain accurate synchronization timestamps, it is recommended to use Sync Group Logs instead.
Monitoring Sync Activity Using Logs (Recommended)
To monitor synchronization activity and retrieve detailed sync status, use:
# Get sync logs for the last 24 hours
$startTime = (Get-Date).AddHours(-24).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-AzSqlSyncGroupLog -ResourceGroupName $resourceGroup `
-ServerName $serverName `
-DatabaseName $databaseName `
-SyncGroupName $syncGroupName `
-StartTime $startTime `
-EndTime $endTime
This command retrieves:
- Sync operation timestamps
- Sync status
- Error messages
- Activity details
Sync Group Logs provide more reliable monitoring information than the Sync Group status output alone.
Retrieving the Last Successful Sync Time
To determine the most recent successful synchronization operation:
# Get the most recent successful sync timestamp
$startTime = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-AzSqlSyncGroupLog -ResourceGroupName $resourceGroup `
-ServerName $serverName `
-DatabaseName $databaseName `
-SyncGroupName $syncGroupName `
-StartTime $startTime `
-EndTime $endTime |
Where-Object { $_.Details -like "*completed*" -or $_.Type -eq "Success" } |
Select-Object -First 1 Timestamp, Type, Details
This helps administrators validate whether synchronization is occurring as expected across the sync topology.
Filtering for Synchronization Errors
To identify failed or problematic sync operations:
# Get only error logs
Get-AzSqlSyncGroupLog -ResourceGroupName $resourceGroup `
-ServerName $serverName `
-DatabaseName $databaseName `
-SyncGroupName $syncGroupName `
-StartTime $startTime `
-EndTime $endTime |
Where-Object { $_.LogLevel -eq "Error" }
Filtering logs by error type allows for:
- Rapid identification of failed sync attempts
- Analysis of failure causes
- Early detection of data consistency risks
Key Takeaways
- Azure SQL Data Sync does not provide native alerting for sync failures
- Sync Group Logs offer detailed monitoring of sync operations
- Get-AzSqlSyncGroupLog provides accurate timestamps and status
- Monitoring logs enables detection of silent sync failures
- PowerShell can be used to proactively monitor synchronization health