Skip to main content

SQL Server Always On AG(WSFC)配置指南(7) - 准备数据库

分类:  SQL Server 标签:  #SQL Server #SQL Server Always on AG 发布于: 2026-03-16 18:38:56

我们已经完成了如下工作:

  1. 安装了Windows Server
  2. 已经配置了网络,禁止了IPV6
  3. 创建了域控和DNS
  4. 将所有的节点都已经加入了域
  5. 安装了SQL Server
  6. 安装了故障转移集群
  7. 创建和配置了gMSA账户或者专用域账户
  8. gMSA账户或者专用域账户分配了必要的权限,包括读写SPN以及节点上的文件权限,同时在每个节点上设置了作为服务登录
  9. 将已经安装好的SQL Server服务和SQL Agent服务更改成了使用gMSA服务或者专用域账户运行。
  10. 配置好了基于SMB共享文件的Witness, 网络路径是:\\hongad\witness
  11. 故障转移集群的配置以及共享文件见证的配置
  12. 我们在每一台SQL节点上启用了高可用性
  13. 我们在每一台SQL节点上为SQL Server服务启用了TCP连接
  14. 我们在每一台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数据库恢复模式必须是FULL
  • AG初次准备数据库时,主库必须实现一次全量备份
  • 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,使用默认安装的位置放置数据文件和日志文件。

到这里数据库已经准备好。