适用于:Azure SQL 数据库
本文介绍如何使用 Azure 门户、PowerShell 或 Azure CLI 为 Azure SQL 数据库配置活动异地复制以及启动故障转移。
活动异地复制按数据库进行配置。 若要故障转移一组数据库,或者如果应用程序需要稳定的连接终结点,请考虑改用故障转移组。
若要完成本教程,需要单一 Azure SQL 数据库。 若要了解如何使用 Azure 门户、Azure CLI 或 PowerShell 创建单一数据库,请参阅快速入门:创建单一数据库 - Azure SQL 数据库。
以下步骤在异地复制合作关系中创建新的辅助数据库。
只有订阅所有者或共有者才能添加辅助数据库。
辅助数据库具有与主数据库相同的名称,并默认使用相同的服务层级和计算大小。 辅助数据库可以是单一数据库,也可以是共用数据库。 有关详细信息,请参阅基于 DTU 的购买模型概述和基于 vCore 的购买模型。 创建辅助数据库并设定种子后,会开始将数据从主数据库复制到新的辅助数据库。
如果次要副本仅用于灾难恢复 (DR),并且没有任何读取或写入工作负荷,则可以通过在配置新的活动异地复制关系时指定备用数据库来节省许可成本。 有关更多信息,请参阅无许可证备用副本。
备注
如果合作伙伴数据库已存在(例如,在终止之前的异地复制关系的情况下),命令会失败。
选择要为异地复制设置的数据库。 需要以下信息:
- 原始 Azure SQL 数据库名称。
- Azure SQL Server 名称。
- 资源组名称。
- 要创建新副本的服务器的名称。
备注
辅助数据库的服务层级必须与主数据库相同。
你可以为辅助服务器选择任何区域,但我们建议使用配对区域。
运行 az sql db replica create 命令。
az sql db replica create --resource-group ContosoHotel --server contosoeast --name guestlist --partner-server contosowest --family Gen5 --capacity 2 --secondary-type Geo
可以选择性地将辅助数据库添加到弹性池。 若要在池中创建辅助数据库,请使用 --elastic-pool
参数。 池必须已在目标服务器上存在。 此工作流不会创建池。
此时会创建辅助数据库,部署过程开始。
部署完成后,可以通过运行 az sql db replica list-links 命令来检查辅助数据库的状态:
az sql db replica list-links --name guestlist --resource-group ContosoHotel --server contosowest
辅助数据库可以通过切换变为主数据库。
运行 az sql db replica set-primary 命令。
az sql db replica set-primary --name guestlist --resource-group ContosoHotel --server contosowest
该命令会立即将辅助数据库切换为主数据库角色。 此过程通常会在 30 秒或更短的时间内完成。
角色切换时,两个数据库都不可用,时间最长可达 25 秒。 如果主数据库具有多个辅助数据库,则该命令自动重新配置其他辅助数据库以连接到新的主数据库。 在正常情况下,完成整个操作所需的时间应该少于一分钟。
此操作会永久停止到辅助数据库的复制,并将辅助数据库的角色更改为常规的读写数据库。 如果与辅助数据库的连接断开,命令会成功,但辅助数据库必须等到连接恢复后才会变为可读写。
运行 az sql db replica delete-link 命令。
az sql db replica delete-link --name guestlist --resource-group ContosoHotel --server contosoeast --partner-server contosowest
确认你想执行该操作。
将执行以下示例中的 T-SQL 命令的客户端计算机的 IP 地址添加到主服务器和辅助服务器的服务器防火墙。 可以通过在从同一客户端计算机连接到主服务器时执行以下查询来确认 IP 地址。
SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;
有关详细信息,请参阅 Azure SQL 数据库和 Azure Synapse IP 防火墙规则。
在主服务器上的
master
数据库中,创建一个专用于活动异地复制设置的 SQL 身份验证登录名。 根据需要调整登录名和密码。CREATE LOGIN geodrsetup WITH PASSWORD = 'ComplexPassword01';
在同一数据库中,为该登录名创建一个用户,并将其添加到
dbmanager
角色:CREATE USER geodrsetup FOR LOGIN geodrsetup; ALTER ROLE dbmanager ADD MEMBER geodrsetup;
记下新登录名的 SID 值。 使用以下查询获取 SID 值。
SELECT sid FROM sys.sql_logins WHERE name = 'geodrsetup';
连接到主数据库(不是
master
数据库),并为同一登录名创建一个用户。CREATE USER geodrsetup FOR LOGIN geodrsetup;
在同一数据库中,将用户添加到
db_owner
角色。ALTER ROLE db_owner ADD MEMBER geodrsetup;
在辅助服务器上的
master
数据库中,使用相同的名称、密码和 SID 在主服务器上创建相同登录名。 将下面的示例命令中的十六进制 SID 值替换为在步骤 4 中获得的 SID。CREATE LOGIN geodrsetup WITH PASSWORD = 'ComplexPassword01', SID = 0x010600000000006400000000000000001C98F52B95D9C84BBBA8578FACE37C3E;
在同一数据库中,为该登录名创建一个用户,并将其添加到
dbmanager
角色。CREATE USER geodrsetup FOR LOGIN geodrsetup; ALTER ROLE dbmanager ADD MEMBER geodrsetup;
使用新的
geodrsetup
登录名连接到主服务器上的master
数据库,并在辅助服务器上启动异地辅助数据库创建。 根据需要调整数据库名称和辅助服务器名称。 执行命令后,可以通过查询主数据库中的 sys.dm_geo_replication_link_status 视图和主服务器上master
数据库中的 sys.dm_operation_status 视图来监视异地辅助数据库创建。 创建异地辅助数据库所需的时间取决于主数据库的大小。alter database [dbrep] add secondary on server [servername];
成功创建异地辅助数据库后,可以删除此过程创建的用户、登录名和防火墙规则。