使用分布式 AG 从独立实例迁移数据库
使用分布式可用性组 (AG) 将数据库(或多个数据库)从 SQL Server 的独立实例迁移到 Azure 虚拟机 (VM) 上的 SQL Server。
验证源 SQL Server 实例满足先决条件后,请按照本文中的步骤在独立 SQL Server 实例上创建可用性组,并将数据库(或数据库组)迁移到 Azure 中的 SQL Server VM。
本文适用于 SQL Server 独立实例上的数据库。 此解决方案不需要 Windows Server 故障转移群集 (WSFC) 或可用性组侦听程序。 也可以迁移可用性组中的数据库。
初始设置
第一步是在 Azure 中创建 SQL Server VM。 可以使用 Azure 门户、Azure PowerShell 或 ARM 模板来执行此操作。
请务必根据先决条件配置 SQL Server VM。
为简单起见,请将目标 SQL Server VM 加入到与源 SQL Server 相同的域中。 否则,请将目标 SQL Server VM 加入与源 SQL Server 的域联合的域。
要使用自动种子设定来创建分布式可用性组 (DAG),DAG 的全局主实例(源)的实例名称必须与 DAG 转发器(目标)的实例名称匹配。 如果全局主实例和转发器之间的实例名称不匹配,则必须使用手动种子设定来创建 DAG,并在以后手动添加任何其他数据库文件。
本文使用以下示例参数:
- 数据库名称:
Adventureworks2022
- 源计算机名称(DAG 中的全局主节点):
OnPremNode
- 源 SQL Server 实例名称:
MSSQLSERVER
- 源可用性组名称:
OnPremAg
- 目标 SQL Server VM 名称(DAG 中的转发器):
SQLVM
- Azure VM 实例名称上的目标 SQL Server:
MSSQLSERVER
- 目标可用性组名称:
AzureAG
- 终结点名称:
Hadr_endpoint
- 分布式可用性组名称:
DAG
- 域名:
Contoso
创建终结点
使用 Transact-SQL (T-SQL) 在源 (OnPremNode
) 和目标 (SQLVM
) SQL Server 实例上创建终结点。
要创建终结点,请在源服务器和目标服务器上运行此 T-SQL 脚本:
CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED
AS TCP (
LISTENER_PORT = 5022,
LISTENER_IP = ALL
)
FOR DATA_MIRRORING(ROLE = ALL,
AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = REQUIRED ALGORITHM AES);
GO
域帐户自动有权访问终结点,但服务帐户可能不会自动成为 sysadmin 组的一部分,并且可能没有连接权限。 要手动授予 SQL Server 服务帐户对终结点的连接权限,请在两台服务器上运行以下 T-SQL 脚本:
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>];
创建源 AG
由于分布式可用性组是跨两个单独可用性组的特殊可用性组,因此您首先需要在源 SQL Server 实例上创建一个可用性组。 如果您已经有一个想要在 Azure 中维护的可用性组,则改为迁移可用性组。
使用 Transact-SQL (T-SQL) 在示例数据库 OnPremAg
的源 (OnPremNode
) 实例上创建可用性组 (Adventureworks2022
)。
要创建可用性组,请在源上运行此脚本:
CREATE AVAILABILITY GROUP [OnPremAG]
WITH (
AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
DB_FAILOVER = OFF,
DTC_SUPPORT = NONE,
CLUSTER_TYPE = NONE
)
FOR DATABASE [Adventureworks2022] REPLICA ON N'OnPremNode'
WITH (
ENDPOINT_URL = N'TCP://OnPremNode.contoso.com:5022',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);
GO
创建目标 AG
还需要在目标 SQL Server VM 上创建可用性组。
使用 Transact-SQL (T-SQL) 在目标 (AzureAG
) 实例上创建可用性组 (SQLVM
)。
要创建可用性组,请在目标上运行此脚本:
CREATE AVAILABILITY GROUP [AzureAG]
WITH (
AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
DB_FAILOVER = OFF,
DTC_SUPPORT = NONE,
CLUSTER_TYPE = NONE,
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0
)
FOR REPLICA ON N'SQLVM'
WITH (
ENDPOINT_URL = N'TCP://SQLVM.contoso.com:5022',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);
GO
创建分布式 AG
配置了源 (OnPremAG
) 和目标 (AzureAG
) 可用性组后,创建分布式可用性组以跨越两个单独的可用性组。
在源 SQL Server 实例 (OnPremNode
) 和 AG (OnPremAG
) 上使用 Transact-SQL 创建分布式可用性组 (DAG
)。
若要创建分布式 AG,请对源运行以下脚本:
CREATE AVAILABILITY GROUP [DAG]
WITH (DISTRIBUTED) AVAILABILITY GROUP
ON 'OnPremAG' WITH (
LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
LISTENER_URL = 'tcp://SQLVM.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
种子设定模式设置为 AUTOMATIC
,因为目标和源上的 SQL Server 版本相同。 如果你的 SQL Server 目标是更高版本,或者如果你的全局主服务器和转发器具有不同的实例名称,则创建分布式 AG,将辅助 AG 加入分布式 AG,并将 SEEDING_MODE
设置为 MANUAL
。 然后手动将数据库从源恢复到目标 SQL Server 实例。 有关详细信息,请参阅迁移期间升级版本。
创建分布式 AG 后,将目标实例 (AzureAG
) 上的目标 AG (SQLVM
) 加入分布式 AG (DAG
)。
要将目标 AG 加入分布式 AG,请在目标上运行此脚本:
ALTER AVAILABILITY GROUP [DAG]
JOIN AVAILABILITY GROUP
ON 'OnPremAG' WITH (
LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
LISTENER_URL = 'tcp://SQLVM.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
如果需要取消、暂停或延迟源和目标可用性组之间的同步(例如,性能问题),则请在源全局主实例 (OnPremNode
) 上运行此脚本:
ALTER AVAILABILITY GROUP [DAG]
MODIFY AVAILABILITY GROUP
ON 'AzureAG' WITH (SEEDING_MODE = MANUAL);
有关详细信息,请参阅取消自动种子设定到转发器。