在本文中,我们将学习如何将 SQL 数据库添加到现有的 Alwayson 可用性组。Alwayson 可用性组是 Microsoft SQL Server 的高可用性和灾难恢复解决方案。数据库必须满足以下先决条件才能成为可用性组的一部分。
在可用性组中添加 SQL 数据库的先决条件
- 数据库必须是用户数据库。
- 必须禁用自动关闭。
- 数据库必须处于多用户和读写模式。
- 数据库必须处于完全恢复模式。
- 数据库必须有完整的数据库备份。
环境设置
我在我的工作站上创建了三个虚拟机来演示这个过程。详情如下:
| 主机名 | 角色 |
|---|---|
| 直流本地 | 我已经在服务器中安装了 Active Directory 角色,并在其中创建了一个名为 DC.Local 的域控制器。 |
| SQL01.dc.local | 可用性组的主要副本。 |
| SQL02.dc.local | 可用性组的次要副本。 |
我使用上述虚拟机创建了一个名为 SQLCluster 的可用性组,在主副本上恢复了 stackoverflow2010 数据库。我们将它添加到 SQLCluster。
使用 SQL Server 管理工作室添加 SQL 数据库
在 SQL01 上启动 SQL Server management studio 🡪 连接到数据库引擎 🡪 展开 Always On 高可用性 🡪 展开可用性组 🡪 展开 SQLCluster 🡪 右键单击可用性数据库 🡪 选择添加数据库。

将数据库添加到可用性组向导将启动。您可以查看向导执行的任务的详细信息和列表。单击下一步。

您可以选择要添加到现有可用性组的数据库。数据库列表及其状态显示在网格视图中。您可以从列表中选择一个或多个数据库。在此演示中,我们在 SQLCluster 中添加 StackOverFlow2010 数据库,因此请从列表中勾选 StackOverFlow2010。单击下一步。

在Connect to Existing Secondary Replicas屏幕上,您可以查看用于创建可用性组的副本列表。SQL02 在辅助副本列表中。要向现有端点授予适当的权限,我们必须连接到辅助副本。为此,请单击连接。

将打开连接到服务器对话框。您可以选择适当的身份验证方法。我们使用 Windows 身份验证,因此从下拉框中选择 Windows 身份验证。

我们可以在 Select Initial Data Synchronization 屏幕上选择数据同步首选项。您可以选择以下任何一种方法。
- 自动播种: SQL Server 自动创建数据库并在此方法中开始播种。要使用此方法,所有参与副本上的目录结构(数据文件路径和日志文件路径)必须相同。
- 完整数据库和日志备份:向导将通过生成数据库的完整备份和日志备份来启动数据同步。备份将在辅助副本上恢复并加入可用性组。我们必须创建一个网络共享以保持完整备份和日志备份。确保它可以从所有辅助副本访问并具有所需的权限。
- 仅加入:当您在辅助副本上恢复数据库备份时使用此方法。该向导将通过将数据库加入可用性组中来启动数据同步。
- 跳过初始数据同步:如果要手动生成数据库的完整和日志备份。
在demo中,我们使用的是Full database Log备份方式;因此,选择完整数据库和日志备份。要保持完整的网络共享和日志备份是**\DC\AGBackups因此,请在文件共享路径中指定它。单击下一步**。

该向导将运行可用性组验证测试。它检查以下参数:
- 共享网络位置
- 次要副本上的可用磁盘空间
- 检查所选数据库是否存在于 SQL02 副本上
- SQL02 副本上数据文件位置的兼容性
在成功完成所有验证测试之前,该向导不会继续。在我们的演示中,验证测试已成功完成。

您可以在摘要屏幕 上验证我们在向导中选择的配置和设置。单击脚本以生成可用性组向导执行的任务的脚本。单击完成。

该向导开始在 SQLCluster 可用性组中添加 Stackoverflow2010 数据库的过程。

向导所用的时间取决于数据库的备份和恢复过程所用的时间。您可以在结果屏幕 上查看向导完成的任务列表。

成功添加数据库后,您可以在“可用性数据库”节点下看到它。

您可以在可用性组仪表板中查看它。要打开可用性组仪表板,展开 SQLCluster 🡪 右键单击可用性数据库并选择显示仪表板。

如上图所示,Stackoverflow2010 数据库已添加。
或者,您可以运行以下查询来查看 SQLCluster 可用性组中的可用性数据库列表。
SELECT DISTINCT ag.NAME,
agstates.primary_replica,
agstates.primary_recovery_health_desc,
[ClusterStat].database_name AS [DatabaseName]
FROM master.sys.availability_groups AS AG
LEFT OUTER JOIN master.sys.dm_hadr_availability_group_states AS agstates
ON AG.group_id = agstates.group_id
INNER JOIN master.sys.availability_replicas AS AR
ON AG.group_id = AR.group_id
INNER JOIN master.sys.dm_hadr_availability_replica_states AS
[ReplicaStats]
ON AR.replica_id = [ReplicaStats].replica_id
AND [ReplicaStats].is_local = 1
INNER JOIN master.sys.dm_hadr_database_replica_cluster_states AS
[ClusterStat]
ON [ReplicaStats].replica_id = [ClusterStat].replica_id
LEFT OUTER JOIN master.sys.dm_hadr_database_replica_states AS
[ReplicaDBStats]
ON [ClusterStat].replica_id = [ReplicaStats].replica_id
AND [ClusterStat].group_database_id =
[ReplicaDBStats].group_database_id
WHERE Isnull([ClusterStat].is_database_joined, 0) = 1
ORDER BY [ClusterStat].database_name
输出

如您所见,Stackoverflow2010 已添加到 SQLCluster。
总结
我们在本文中学习了如何在现有 Alwayson 可用性组中添加 SQL 数据库。
关于作者

Nisarg Upadhyay 是一名 SQL Server 数据库管理员和 Microsoft 认证的专业人员,他在 SQL Server 管理方面拥有超过 8 年的经验,在 Oracle 10g 数据库管理方面拥有 2 年的经验。
他在数据库设计、性能调整、备份和恢复、HA 和 DR 设置、数据库迁移和升级方面拥有专业知识。他已经完成了甘帕特大学的 B.Tech。
原文标题:Add SQL databases in an existing availability group
原文作者:Nisarg Upadhyay
原文地址:https://www.sqlshack.com/add-sql-databases-in-an-existing-availability-group/




