SQL Server Always On AG(WSFC)配置指南(7) - 准备数据库
分类: SQL Server ◆ 标签: #SQL Server #SQL Server Always on AG ◆ 发布于: 2026-03-16 18:38:56
我们已经完成了如下工作:
- 安装了
Windows Server - 已经配置了网络,禁止了
IPV6 - 创建了域控和
DNS - 将所有的节点都已经加入了域
- 安装了
SQL Server - 安装了故障转移集群
- 创建和配置了
gMSA账户或者专用域账户 - 为
gMSA账户或者专用域账户分配了必要的权限,包括读写SPN以及节点上的文件权限,同时在每个节点上设置了作为服务登录 - 将已经安装好的
SQL Server服务和SQL Agent服务更改成了使用gMSA服务或者专用域账户运行。 - 配置好了基于
SMB共享文件的Witness, 网络路径是:\\hongad\witness - 故障转移集群的配置以及共享文件见证的配置
- 我们在每一台
SQL节点上启用了高可用性 - 我们在每一台
SQL节点上为SQL Server服务启用了TCP连接 - 我们在每一台
SQL节点上配置了防火墙,集群内放通了必要的端口。
接下来我们需要准备数据库。
Always On Availability Groups(Always on AG) 和 Failover Cluster Instance(FCI) 概念
FCI保护的是服务器实例(所有的数据库通过共享的文件系统存储,一旦数据挂全挂)AG保护的是具体的数据库,可以选择哪些数据库高可用,而且是通过复制将数据保存在多处
| 特性 | FCI(Failover Cluster Instance) | AG(Always On Availability Groups) |
|---|---|---|
| 保护级别 | 实例级 (Instance Level) | 数据库级 (Database Level) |
| 工作原理 | 共享存储。如果主节点宕机,整个 SQL Server 实例(包含该实例下的所有数据库)一起漂移到备用节点。 | 不依赖共享存储(通常)。通过日志传输将特定数据库同步到备用节点。可以只迁移部分数据库。 |
| 存储要求 | 必须使用共享存储(如 SAN, iSCSI, SMB Share)。所有节点访问同一份数据文件。 | 不需要共享存储。每个节点都有自己独立的数据副本。 |
| 可读性 | 辅助节点通常不可读(除非使用特殊配置如分布式事务,但主要设计为冷备/热备切换)。 | 辅助副本可以配置为可读(用于报表、备份卸载等)。 |
| 适用场景 | 防止服务器硬件故障、操作系统崩溃。适合需要实例级别整体迁移的场景。 | 防止数据库损坏、需要读写分离、需要跨子网/跨地域容灾。 |
大致知道了上述概念,我们就可以很容易理解为什么要提前准备数据库了,因为AG就是基于数据库的啊
准备Primary数据库
要点:
AG要求Primary数据库恢复模式必须是FULLAG初次准备数据库时,主库必须实现一次全量备份AG初次准备数据库时,除了备份数据,还需要全量备份事务日志。
选择了哪一台节点作为Primary节点之后,通过Doamin Admin登录到该节点后,启动数据库管理工具,例如SSMS, 找到您需要准备的数据库,新建查询窗口。
检查数据库的恢复模式:
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'testdb1';
如果如下图显示为Simple:

使用如下的语句将数据库的恢复模式设置为FULL
ALTER DATABASE [testdb1] SET RECOVERY FULL WITH NO_WAIT;
GO
可以再次运行上述语句确认:

确认好模式之后,注意该数据库不要再有任何访问了,一定要确认和保证这一点:
BACKUP DATABASE [testdb1]
TO DISK=N'\\hongad\dbbackup\testdb1_full.bak'
WITH INIT, COMPRESSION;
GO
BACKUP LOG [testdb1]
TO DISK = N'\\hongad\dbbackup\testdb1_Log.trn'
WITH INIT,COMPRESSION;
GO
注意:
- 还记得设置共享文件见证的时候我们额外创建了一个共享文件夹吗?
\\hongad\backup, 就是方便和其他节点交换文件。 - 要同时全量备份数据和事务日志,必须都要备份。
- 注意选项
INIT Primay节点备份好之后,一定不要有其他的任何访问和修改,否则容易造成失败。
在其他SQL节点上恢复数据库
你已经在希望作为Primary节点上进行了数据库和日志的全量备份,我们现在需要在所有作为副本的SQL节点上恢复数据库。
以域管理员身份登录到节点上,使用SSMS工具连接数据库,并运行如下的命令:
RESTORE DATABASE [testdb1]
FROM DISK=N'\\hongad\dbbackup\testdb1_full.bak'
WITH NORECOVERY,
MOVE 'AdventureWorks2022' TO 'C:\SQLData\Data\testdb1.mdf',
MOVE 'AdventureWorks2022_log' TO 'C:\SQLData\Logs\testdb1_log.ldf';
GO
RESTORE LOG [testdb1]
FROM DISK = '\\hongad\dbbackup\testdb1_Log.trn'
WITH NORECOVERY;
GO
- 数据文件和日志文件都需要恢复
- 注意恢复选项
NORECOVERY, 在副本节点上必不可少。 - 上述代码使用了
MOVE TO, 可以根据自己的配置进行更改,例如直接就拿掉两个MOVE TO,使用默认安装的位置放置数据文件和日志文件。
到这里数据库已经准备好。