SQL Server Always On 重新添加从库步骤
环境说明
- 主库:235
- 从库:209
- 可用性组:AG_235_209
- 数据库:Test
第一步:主库 235 --- 备份数据库
确认数据库为完整恢复模式(Always On 要求),然后分别做完整备份和日志备份。
sql
-- 确认完整恢复模式
ALTER DATABASE [Test] SET RECOVERY FULL;
-- 完整备份
BACKUP DATABASE [Test]
TO DISK = 'C:\Backup\Test_full.bak'
WITH COMPRESSION, INIT, STATS = 10;
-- 日志备份
BACKUP LOG [Test]
TO DISK = 'C:\Backup\Test_log.bak'
WITH STATS = 10;
第二步:复制备份文件到从库 209
将以下两个文件手动拷贝到从库 209 的备份目录(如 C:\Backup\):
Test_full.bakTest_log.bak
第三步:从库 209 --- 还原数据库
⚠️ 注意:还原时必须使用
WITH NORECOVERY,不能使用WITH RECOVERY,否则数据库会上线并脱离 Always On 同步链。
sql
-- 还原完整备份
RESTORE DATABASE [Test]
FROM DISK = 'C:\Backup\Test_full.bak'
WITH NORECOVERY, STATS = 10;
-- 还原日志备份
RESTORE LOG [Test]
FROM DISK = 'C:\Backup\Test_log.bak'
WITH NORECOVERY;
还原完成后,SSMS 中数据库会显示 "正在还原",这是正确状态,无需处理。
第四步:主库 235 --- 将数据库加入可用性组
⚠️ 注意:必须等第三步从库还原完全完成后,再执行此步骤。
sql
ALTER AVAILABILITY GROUP [AG_235_209] ADD DATABASE [Test];
第五步:从库 209 --- 加入可用性组
sql
ALTER DATABASE [Test]
SET HADR AVAILABILITY GROUP = [AG_235_209];
执行后,从库数据库状态会从 "正在还原" 变为 "正在还原 / 同步中",稍等片刻即可同步完成。
验证同步状态
在主库 235 上执行以下查询,确认同步结果:
sql
SELECT
db.database_name AS 数据库,
rs.synchronization_state_desc AS 同步状态,
rs.synchronization_health_desc AS 健康状态
FROM sys.availability_groups ag
JOIN sys.availability_databases_cluster db ON ag.group_id = db.group_id
JOIN sys.dm_hadr_database_replica_states rs ON db.group_database_id = rs.group_database_id
WHERE ag.name = 'AG_235_209'
AND rs.is_local = 0;
预期结果:
| 数据库 | 同步状态 | 健康状态 |
|---|---|---|
| Test | SYNCHRONIZED | HEALTHY |
显示 SYNCHRONIZED + HEALTHY 即表示从库配置成功。
操作顺序总览
主库235: ALTER DATABASE SET RECOVERY FULL
主库235: BACKUP DATABASE
主库235: BACKUP LOG
↓ 将 .bak 文件复制到从库 209
从库209: RESTORE DATABASE WITH NORECOVERY ← 等待完成
从库209: RESTORE LOG WITH NORECOVERY ← 等待完成
↓ 确认从库显示"正在还原"
主库235: ALTER AVAILABILITY GROUP ADD DATABASE
从库209: ALTER DATABASE SET HADR AVAILABILITY GROUP
主库235: 查询验证同步状态