|
| 1 | +--- |
| 2 | +title: Enable zone redundancy for Azure SQL Database |
| 3 | +description: Learn how to update your Azure SQL Database to enable availability zone support. |
| 4 | +author: WilliamDAssafMSFT |
| 5 | +ms.author: wiassaf |
| 6 | +ms.reviewer: anaharris, rsetlem, mathoma |
| 7 | +ms.date: 07/25/2025 |
| 8 | +ms.service: azure-sql-database |
| 9 | +ms.subservice: high-availability |
| 10 | +ms.topic: upgrade-and-migration-article |
| 11 | +ms.custom: |
| 12 | + - subject-reliability |
| 13 | +monikerRange: "=azuresql || =azuresql-db" |
| 14 | +--- |
| 15 | +# Enable zone redundancy for Azure SQL Database |
| 16 | + |
| 17 | +[!INCLUDE [appliesto-sqldb](../includes/appliesto-sqldb.md)] |
| 18 | + |
| 19 | +This guide describes how to update your Azure SQL Database for zone redundancy with [availability zones](/azure/reliability/availability-zones-overview). |
| 20 | + |
| 21 | +Enabling zone redundancy for Azure SQL Database guarantees high availability, making your databases and elastic pools resilient to a larger set of failures, such as catastrophic datacenter outages, without any changes of the application logic. When zone redundancy is enabled, your database utilizes availability zones to replicate data across multiple physical locations within a single Azure region. |
| 22 | + |
| 23 | + |
| 24 | +## Prerequisites |
| 25 | + |
| 26 | +Before you enable availability zone support, ensure that your Azure SQL Database is in a supported service tier and deployment model. Make sure that your tier and model is offered in a [region that supports availability zones](/azure/reliability/regions-list). |
| 27 | + |
| 28 | +| Service tier | Deployment model | Zone redundancy availability | |
| 29 | +|-----|------|------| |
| 30 | +| Premium | Single database or Elastic Pool | [All regions that support availability zones](/azure/reliability/regions-list)| |
| 31 | +| Business Critical | Single database or Elastic Pool | [All regions that support availability zones](/azure/reliability/regions-list) | |
| 32 | +| General Purpose | Single database or Elastic Pool | [Selected regions that support availability zones](high-availability-sla.md?view=azuresql-db&preserve-view=true#general-purpose-service-tier-zone-redundant-availability)| |
| 33 | +| Hyperscale | Single database | [All regions that support availability zones](/azure/reliability/regions-list) | |
| 34 | + |
| 35 | +## Downtime requirements |
| 36 | + |
| 37 | +Enabling zone redunancy for Premium, Business Critical, and General Purpose service tier is an online operation with a brief disconnect. If you have implemented [retry logic for standard transient errors](troubleshoot-common-connectivity-issues.md?view=azuresql-db&preserve-view=true#retry-logic-for-transient-errors), you won't notice the failover. |
| 38 | + |
| 39 | +For Hyperscale service tier, zone redundancy support can only be specified during database creation and can't be modified once the resource is provisioned. If you wish to move to availability zone support, you'll need to transfer the data with database copy, point-in-time restore, or geo-replica. If the target database is in a different region than the source or if the database backup storage redundancy for the target differs from the source database, then downtime is proportional to the size of the data operation. |
| 40 | + |
| 41 | +<a id="migration"></a> |
| 42 | + |
| 43 | +## Enable zone redundancy (Premium, Business Critical, and General Purpose) |
| 44 | + |
| 45 | +For the Premium, Business Critical, and General Purpose service tiers, enabling zone redundancy is possible. |
| 46 | + |
| 47 | +Follow these steps to enable zone redundancy for a single database or an elastic pool. |
| 48 | + |
| 49 | +<a id="migrate-a-single-database"></a> |
| 50 | + |
| 51 | +### Enable zone redundancy for a single database |
| 52 | + |
| 53 | +# [Azure portal](#tab/portal) |
| 54 | + |
| 55 | +1. Go to the [Azure portal](https://portal.azure.com) to find your database. Search for and select **SQL databases**. |
| 56 | + |
| 57 | +1. Select the desired database. |
| 58 | + |
| 59 | +1. Under **Settings** select **Compute + Storage**. |
| 60 | + |
| 61 | +1. Select **Yes** for **Would you like to make this database zone redundant?** |
| 62 | + |
| 63 | +1. Select **Apply**. |
| 64 | + |
| 65 | +1. Wait to receive an operation completion notice in **Notifications** in the top menu of the Azure portal. |
| 66 | + |
| 67 | +1. To verify that zone redundancy is enabled, select **Overview** and then select **Properties**. |
| 68 | + |
| 69 | +1. Under the **Availability** section, confirm that zone redundancy is set to **Enabled**. |
| 70 | + |
| 71 | +# [PowerShell](#tab/powershell) |
| 72 | + |
| 73 | +Open PowerShell as Administrator and run the following command (replace the placeholders in `<>` with your resource names). The `<server_name>` should not include `.database.windows.net`. |
| 74 | + |
| 75 | +```powershell |
| 76 | +Connect-AzAccount |
| 77 | +$subscriptionid = <'your subscription id here'> |
| 78 | +Set-AzContext -SubscriptionId $subscriptionid |
| 79 | +
|
| 80 | +$parameters = @{ |
| 81 | + ResourceGroupName = '<Resource_Group_Name>' |
| 82 | + ServerName = '<Server_Name>' |
| 83 | + DatabaseName = '<Database_Name>' |
| 84 | +} |
| 85 | +Set-AzSqlDatabase @parameters -ZoneRedundant |
| 86 | +``` |
| 87 | + |
| 88 | +# [Azure CLI](#tab/cli) |
| 89 | + |
| 90 | +Use Azure CLI to run the following command (replace the placeholders in `<>` with your resource names): |
| 91 | + |
| 92 | +```azurecli |
| 93 | + az sql db update --resource-group "<Resource_Group_Name>" --server "<Server_Name>" --name "<Database_Name>" --zone-redundant |
| 94 | +``` |
| 95 | + |
| 96 | +# [REST API](#tab/API) |
| 97 | + |
| 98 | +To enable zone redundancy, see [Databases - Create Or Update API](/rest/api/sql/2022-05-01-preview/databases/create-or-update?tabs=HTTP) and use the `properties.zoneRedundant` property. |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +<a id="migrate-an-elastic-pool"></a> |
| 103 | + |
| 104 | +### Enable zone redundancy for an elastic pool |
| 105 | + |
| 106 | +> [!IMPORTANT] |
| 107 | +> Enabling zone redundancy support for elastic pools makes all databases within the pool zone redundant. |
| 108 | +
|
| 109 | +# [Azure portal](#tab/portal) |
| 110 | + |
| 111 | +1. Go to the [Azure portal](https://portal.azure.com) to find and select the desired elastic pool. |
| 112 | + |
| 113 | +1. Under **Settings**, select **Compute + Storage**. |
| 114 | + |
| 115 | +1. Select **Yes** for **Would you like to make this elastic pool zone redundant?**. |
| 116 | + |
| 117 | +1. Select **Save**. |
| 118 | + |
| 119 | +1. Wait to receive an operation completion notice in **Notifications** in the top menu of the Azure portal. |
| 120 | + |
| 121 | +1. To verify that zone redundancy is enabled, select **Configure** and then select **Pool settings**. |
| 122 | + |
| 123 | +1. The zone redundant option should be set to **Yes**. |
| 124 | + |
| 125 | +# [PowerShell](#tab/powershell) |
| 126 | + |
| 127 | +Open PowerShell as Administrator and run the following command (replace the placeholders in `<>` with your resource names). The `<server_name>` should not include `.database.windows.net`. |
| 128 | + |
| 129 | +```powershell |
| 130 | +Connect-AzAccount |
| 131 | +$subscriptionid = <'your subscription id here'> |
| 132 | +Set-AzContext -SubscriptionId $subscriptionid |
| 133 | +
|
| 134 | +$parameters = @{ |
| 135 | + ResourceGroupName = '<Resource_Group_Name>' |
| 136 | + ServerName = '<Server_Name>' |
| 137 | + ElasticPoolName = '<Elastic_Pool_Name>' |
| 138 | +} |
| 139 | +
|
| 140 | +Set-AzSqlElasticPool @parameters -ZoneRedundant |
| 141 | +``` |
| 142 | + |
| 143 | +# [Azure CLI](#tab/cli) |
| 144 | + |
| 145 | +Use Azure CLI to run the following command (replace the placeholders in `<>` with your resource names): |
| 146 | + |
| 147 | +```azurecli |
| 148 | + az sql elastic-pool update --resource-group "<Resource_Group_Name>" --server "<Server_Name>" --name "<Elastic_Pool_Name>" --zone-redundant |
| 149 | +``` |
| 150 | + |
| 151 | +# [REST API](#tab/API) |
| 152 | + |
| 153 | +To enable zone redundancy, see [Elastic Pools - Create Or Update API](/rest/api/sql/2022-05-01-preview/elastic-pools/create-or-update?tabs=HTTP). |
| 154 | + |
| 155 | +--- |
| 156 | + |
| 157 | +## Redeployment (Hyperscale) |
| 158 | + |
| 159 | +For the Hyperscale service tier, zone redundancy support can only be specified during database creation and can't be modified once the database is provisioned. If you wish to gain zone redundancy support, you need to perform a data transfer from your existing Hyperscale service tier single database. To perform the transfer and enable the zone redundancy option, a clone must be created using database copy, point-in-time restore, or geo-replica. |
| 160 | + |
| 161 | +### Redeployment considerations |
| 162 | + |
| 163 | +- There are two modes of redeployment (online and offline): |
| 164 | + |
| 165 | + - The **Database copy and point-in-time restore methods (offline mode)** create a transactionally consistent database at a certain point in time. As a result, any data changes performed after the copy or restore operation have been initiated won't be available on the copied or restored database. |
| 166 | + |
| 167 | + - **Geo-replica method (online mode)** is a redeployment wherein any data changes from source are synchronized to target. |
| 168 | + |
| 169 | +- Connection string for the application must be updated to point to the zone redundant database. |
| 170 | + |
| 171 | +### Redeploy a single database |
| 172 | + |
| 173 | +#### Database copy |
| 174 | + |
| 175 | +To create a database copy and enable zone redundancy with Azure portal, PowerShell, or Azure CLI, follow the instructions in [copy a transactionally consistent copy of a database in Azure SQL Database](database-copy.md?view=azuresql-db&preserve-view=true#copy-using-the-azure-portal). |
| 176 | + |
| 177 | +#### Point-in-time restore |
| 178 | + |
| 179 | +To create a point-in-time database restore and enable zone redundancy with Azure portal, PowerShell, or Azure CLI, follow the instructions in [Point-in-time restore](recovery-using-backups.md?view=azuresql-db&preserve-view=true#point-in-time-restore). |
| 180 | + |
| 181 | +##### Geo-replica |
| 182 | + |
| 183 | +To create a geo-replica of the database: |
| 184 | + |
| 185 | +1. Follow the instructions with Azure portal, PowerShell, or Azure CLI in [Configure active geo-replication and failover (Azure SQL Database)](active-geo-replication-configure-portal.md?view=azuresql-db&preserve-view=true) and enable zone redundancy under **Compute + Storage** |
| 186 | + |
| 187 | +1. The replica is seeded, and the time taken for seeding the data depends upon size of source database. You can monitor the status of seeding in the Azure portal or by running the following TSQL queries on the replica database: |
| 188 | + |
| 189 | + ```sql |
| 190 | + SELECT * FROM sys.dm_geo_replication_link_status; |
| 191 | + SELECT * FROM sys.dm_operation_status; |
| 192 | + ``` |
| 193 | + |
| 194 | +1. Once the database seeding is finished, perform a planned (no data loss) failover to make the zone redundant target database as primary. |
| 195 | + - Use the [sys.dm_geo_replication_link_status](/sql/relational-databases/system-dynamic-management-views/sys-dm-geo-replication-link-status-azure-sql-database?view=azuresqldb-current&preserve-view=true) to view the status of the geo-replication state. The `replication_state_desc` is `CATCH_UP` when the secondary database is in a transactionally consistent state. |
| 196 | + - In the [sys.dm_operation_status](/sql/relational-databases/system-dynamic-management-views/sys-dm-operation-status-azure-sql-database?view=azuresqldb-current&preserve-view=true) dynamic management view, look for `state_desc` to be `COMPLETED` when the seeding operation has completed. |
| 197 | + |
| 198 | +1. Update the server name in the connection strings for the application to reflect the new zone redundant database. |
| 199 | + |
| 200 | +1. To clean up, consider removing the original non-zone redundant database from the geo replica relationship. You can choose to delete it. |
| 201 | + |
| 202 | +## Validate zone redundancy |
| 203 | + |
| 204 | +You can use Azure PowerShell or the Azure CLI or the [REST API](/rest/api/sql/databases/get) to check the `ZoneRedundant` property for a database. |
| 205 | + |
| 206 | +# [Portal](#tab/portal) |
| 207 | + |
| 208 | +1. In the Azure portal, navigate to your Azure SQL Database. |
| 209 | +1. Under **Settings**, select **Compute + Storage**. |
| 210 | +1. Check the value of the **Would you like to make this database zone redundant?** setting. |
| 211 | + |
| 212 | +# [Azure PowerShell](#tab/powershell) |
| 213 | + |
| 214 | +Use the following example command to check the value of `ZoneRedundant` property for a database, for example the `master` database. |
| 215 | + |
| 216 | +```powershell |
| 217 | +Get-AzSqlDatabase -ResourceGroupName "myResourceGroup" -ServerName "myServerName" -DatabaseName "master" |
| 218 | +``` |
| 219 | + |
| 220 | +# [Azure CLI](#tab/cli) |
| 221 | + |
| 222 | +Use the following example command to check the value of `ZoneRedundant` property for a database, for example the `master` database. |
| 223 | + |
| 224 | +```azurecli |
| 225 | +az sql db show --resource-group "myResourceGroup" --server "myServerName" --name master |
| 226 | +``` |
| 227 | + |
| 228 | +# [REST API](#tab/API) |
| 229 | + |
| 230 | +See [Databases - Get API](/rest/api/sql/2022-05-01-preview/databases/get?tabs=HTTP) and view the `properties.zoneRedundant` property. |
| 231 | + |
| 232 | +--- |
| 233 | + |
| 234 | +## Disable zone-redundancy |
| 235 | + |
| 236 | +To disable zone-redundancy for a single database or an elastic pool, you can use the Azure portal, ARM API, PowerShell, or CLI. |
| 237 | + |
| 238 | +### Disable zone-redundancy for a single database |
| 239 | + |
| 240 | +# [Portal](#tab/portal) |
| 241 | + |
| 242 | +1. Go to the [Azure portal](https://portal.azure.com) to find and select the database that you no longer want to be zone-redundant. |
| 243 | + |
| 244 | +1. Under **Settings**, select **Compute + Storage**. |
| 245 | + |
| 246 | +1. Select **No** for **Would you like to make this database zone redundant?** |
| 247 | + |
| 248 | +1. Select **Save**. |
| 249 | + |
| 250 | +# [PowerShell](#tab/powershell) |
| 251 | + |
| 252 | +```powershell |
| 253 | +set-azsqlDatabase -ResourceGroupName "<Resource-Group-Name>" -DatabaseName "<Server-Name>" -ServerName "<Server-Name>" -ZoneRedundant:$false |
| 254 | +``` |
| 255 | + |
| 256 | +# [CLI](#tab/cli) |
| 257 | + |
| 258 | +```azurecli |
| 259 | +az sql db update --resource-group "<Resource-Group-Name>" --server "<Server-Name>" --name "<Server-Name>" --zone-redundant false |
| 260 | +``` |
| 261 | + |
| 262 | +# [REST API](#tab/API) |
| 263 | + |
| 264 | +See [Databases - Create Or Update API](/rest/api/sql/2022-05-01-preview/databases/create-or-update?tabs=HTTP) and use the `properties.zoneRedundant` property. |
| 265 | + |
| 266 | +--- |
| 267 | + |
| 268 | +### Disable zone-redundancy for an elastic pool |
| 269 | + |
| 270 | +# [Portal](#tab/portal) |
| 271 | + |
| 272 | +1. Go to the [Azure portal](https://portal.azure.com) to find and select the elastic pool that you no longer want to be zone-redundant. |
| 273 | + |
| 274 | +1. Under **Settings**, select **Compute + Storage**. |
| 275 | + |
| 276 | +1. Select **No** for **Would you like to make this elastic pool zone redundant?**. |
| 277 | + |
| 278 | +1. Select **Save**. |
| 279 | + |
| 280 | +# [PowerShell](#tab/powershell) |
| 281 | + |
| 282 | +```powershell |
| 283 | +Set-AzSqlElasticpool -ResourceGroupName "<Resource-Group-Name>" -ServerName "<Server-Name>" -ElasticPoolName "<Elastic-Pool-Name>" -ZoneRedundant:$false |
| 284 | +``` |
| 285 | + |
| 286 | +# [CLI](#tab/cli) |
| 287 | + |
| 288 | +```azurecli |
| 289 | +az sql elastic-pool update --resource-group "<Resource-Group-Name>" --server "<Server-Name>" --name "<Server-Name>" --zone-redundant false |
| 290 | +``` |
| 291 | + |
| 292 | +# [REST API](#tab/API) |
| 293 | + |
| 294 | +See [Databases - Create Or Update API](/rest/api/sql/elastic-pools/create-or-update?tabs=HTTP) and use the `properties.zoneRedundant` property. |
| 295 | + |
| 296 | +--- |
| 297 | + |
| 298 | +To disable zone-redundancy for Hyperscale service tier, you can reverse the steps documented in [Redeployment (Hyperscale)](#redeployment-hyperscale). |
| 299 | + |
| 300 | +## Related content |
| 301 | + |
| 302 | +- [Availability through redundancy - Azure SQL Database](high-availability-sla-local-zone-redundancy.md) |
| 303 | +- [Azure services that support availability zones](/azure/reliability/availability-zones-service-support) |
| 304 | +- [Azure regions that support availability zones](/azure/reliability/regions-list) |
0 commit comments