Zone-redundant Azure SQL: the basics
What does a single-zone database actually expose you to?
An Azure SQL database, by default, lives in one availability zone of its primary region. The compute replica that serves queries sits in that zone, and on the General Purpose tier the database files are held in storage that is local to it. Most Azure regions are built from three physically separate availability zones, each with its own power, cooling and networking, so a single zone can fail without the others. A database pinned to one zone inherits that zone's fate: if the datacentre behind it loses power or network, the database is unreachable until the platform recovers it elsewhere, and the application that depends on it is down for the duration.
Zone redundancy changes that. When you enable it, Azure SQL replicates the database across the availability zones in the primary region: the compute layer keeps standby replicas in other zones, and on General Purpose the data and backup storage move to zone-redundant storage so the files survive the loss of any one zone. The result is a higher availability SLA, from a baseline of 99.99 per cent to 99.995 per cent when zone redundancy is enabled in a region that supports availability zones, and a failover that the platform handles automatically with no change to your application's connection string or logic.
Most single-zone databases are not a deliberate choice; they are the default that nobody revisited. A database created before zone redundancy was an option, a module that never set the flag, a tier chosen for cost that happens to start non-redundant. Azure Advisor surfaces the gap as a reliability recommendation, but the underlying job is the same: find every production database whose availability is tied to a single zone, decide which genuinely need to survive a zone outage, and replicate them across zones before the outage arrives rather than after.
In this lesson you will learn how Azure SQL expresses zone redundancy, how to find every production database that is still tied to a single availability zone, and how to make them zone-redundant without an outage of their own. The lesson covers the General Purpose, Business Critical and Hyperscale tiers, the difference in how each enables zone redundancy, and the backup-storage side of the same capability.
The zone that took the region's headlines
Cloud outages that make the news are very rarely a whole region going dark. Far more often it is a single availability zone, one set of buildings, that loses power, cooling or a network link while the rest of the region carries on serving traffic. That is exactly the failure availability zones were designed to contain, and exactly the failure a single-zone database has no defence against. The quiet lesson from every one of these incidents is the same: the workloads that stayed up were the ones already replicated across zones before the event, because zone redundancy is a decision you can only make in advance, never during the outage.
Finding single-zone databases across a subscription
Priya is the reliability lead at a SaaS company whose checkout and customer portal both sit on Azure SQL. Azure Advisor has raised a reliability recommendation to enable zone redundancy, and she wants to know which databases are exposed before deciding what to change.
Rather than work the Advisor list blind, she starts by listing every database with its tier and its current zone-redundant state, so the revenue-bearing production databases can be separated from test and staging before anything is touched.
List every database on a server with its tier and whether it is currently zone-redundant. The False rows on production tiers are the exposure.
A production database on a tier that supports zone redundancy but shows ZoneRedundant False is the highest-value target. Protect the revenue-bearing ones first; the test database can wait or stay single-zone on purpose.
How Azure SQL makes a database zone-redundantdeep dive
Zone redundancy resolves to a single property on the database, 'zoneRedundant', but what it sets up differs by tier. On General Purpose, the database is a single compute replica over remote storage, so zone redundancy replicates the data and backup storage across availability zones using zone-redundant storage and keeps spare compute capacity in other zones to recover into; the partner property, the backup storage redundancy, can be set to 'Zone' so the backups survive a zone loss too. On Business Critical, the tier already runs a cluster of replicas, so zone redundancy simply spreads those replicas across different availability zones instead of placing them together. On Hyperscale, zone redundancy spreads the compute and page-server replicas across zones, and for some Hyperscale configurations it can only be set when the database is created.
For General Purpose, Business Critical and Premium databases, enabling zone redundancy on an existing database is an online operation: the platform builds the redundant configuration in the background and completes with a brief disconnect, the same kind of momentary failover the database already handles during planned maintenance, so a connection that retries transient faults rides through it. The SLA reflects the change: the baseline 99.99 per cent availability rises to 99.995 per cent once the database is zone-redundant in a region that supports availability zones, with a recovery point objective of zero because the redundant replicas are kept in sync.
Not every tier supports it. Zone redundancy is available on the General Purpose, Business Critical and Hyperscale tiers of the vCore model and on the Premium tier of the DTU model. The Basic and Standard DTU tiers do not support it at all, so a database that needs zone redundancy on one of those tiers has to move to a supported tier first. This is why the capability is a database-by-database decision rather than a single switch: the tier, the cost and the criticality all feed into which databases are worth protecting.
What is the impact of leaving a production database single-zone?
The direct impact is downtime you cannot control or shorten. A single-zone database that loses its datacentre to a power, cooling or network failure is unreachable until the platform recovers it, and the application stacked on top of it is down for the whole of that window. Availability-zone failures are the most common shape of cloud outage, more common by far than a whole region failing, and they are precisely the failure a single-zone database has no answer to. A zone-redundant database, by contrast, fails over to a replica in another zone automatically and stays up.
The second-order impact is blast radius and recovery effort. When a single-zone database goes down, the incident is not just the minutes it is unreachable; it is the on-call response, the manual checks that the application reconnected cleanly, the reconciliation of anything that was in flight when it dropped, and the post-incident review. Zone redundancy turns that from a recovery operation into a non-event the platform absorbs, so the engineering cost of a zone failure shrinks to nothing for the databases that have it.
On the commitment side, an availability SLA you have promised to customers, or that an internal service depends on, is only as strong as the weakest single point of failure beneath it. A 99.99 per cent application built on a single-zone database cannot actually deliver 99.99 per cent if one datacentre failure can take that database down for hours. Making the database zone-redundant raises both the real availability and the SLA the platform stands behind it, from 99.99 to 99.995 per cent, which is the difference between a commitment you hope to meet and one the architecture supports.
How do you make a database zone-redundant safely?
Work the capability as one loop rather than reacting to the Advisor recommendation in isolation. The order matters: decide which databases justify the cost before you enable anything, and confirm the tier supports it, so you do not pay for redundancy where it is not needed or attempt it where it is not available.
1. Inventory every database by tier and zone state
List every database with its service tier and its current 'zoneRedundant' value. Treat this inventory as the source of truth rather than the Advisor count, because Advisor surfaces the gap but not the business value behind each database. Note which databases sit on Basic or Standard DTU tiers, since those cannot be made zone-redundant without first moving to a supported tier.
2. Rank by the cost of downtime, not by database count
For each production database, ask what an hour of it being unreachable actually costs: revenue, breached commitments, incident response. The databases behind revenue and behind customer-facing availability promises are the ones to protect; test, staging and internal reporting databases with no downtime cost can stay single-zone on purpose. The uplift is real, so target it where the outage is expensive.
3. Enable zone redundancy, highest-value first
For General Purpose, Business Critical and Premium databases this is an online operation with a brief disconnect, so run it during a low-traffic window and make sure clients retry transient faults. On General Purpose, set the backup storage redundancy to Zone in the same change so the backups survive a zone loss too. For Hyperscale, check whether your configuration allows enabling it on an existing database or whether it must be set at creation, and plan accordingly.
4. Make zone redundancy the default for new databases
Bake 'zoneRedundant: true' into the Bicep or Terraform module that provisions production databases, so new ones are zone-redundant from the start rather than inheriting the single-zone default and waiting for Advisor to flag them. Pair it with an Azure Policy audit so any production database created without zone redundancy is visible, turning a recurring cleanup into a standing guardrail.
# Make a revenue-bearing General Purpose database zone-redundant,
# and move its backups to zone-redundant storage in the same change.
# Online operation with a brief disconnect: run in a low-traffic window.
az sql db update \
--resource-group rg-prod \
--server sql-prod-uksouth \
--name checkout-prod \
--zone-redundant true \
--backup-storage-redundancy Zone
# Confirm the change took effect.
az sql db show \
--resource-group rg-prod \
--server sql-prod-uksouth \
--name checkout-prod \
--query "{name:name, zoneRedundant:zoneRedundant, backup:currentBackupStorageRedundancy}" -o table
# Make it the default for new databases in Bicep:
#
# resource db 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
# parent: sqlServer
# name: 'checkout-prod'
# location: location
# sku: { name: 'GP_Gen5', tier: 'GeneralPurpose', capacity: 4 }
# properties: {
# zoneRedundant: true
# requestedBackupStorageRedundancy: 'Zone'
# }
# } Quick quiz
Question 1 of 5Azure Advisor raises a reliability recommendation to enable zone redundancy on your SQL estate. What is the most effective way to respond?
You scored
0 / 5
Keep learning
Go deeper on how Azure SQL expresses zone redundancy across tiers and on the backup-storage side of the same capability.
- Enable zone redundancy for Azure SQL Database How to enable zone redundancy per tier in the portal, CLI and PowerShell, including the online-operation behaviour.
- Availability through local and zone redundancy How the General Purpose, Business Critical and Hyperscale architectures change when zone redundancy is enabled, and the SLA each delivers.
- Reliability in Azure SQL Database The reliability reference for availability-zone support, including which tiers and regions support zone redundancy.
You can now treat Azure SQL zone redundancy as one reliability capability rather than a single Advisor recommendation: inventory every database by tier and zone state, rank by the cost of downtime, make the revenue-bearing ones zone-redundant with their backups, and bake the same configuration into the provisioning module so new databases inherit it. A single datacentre failure stops being an outage for the systems that matter and becomes a non-event the platform absorbs.
Back to the library