同步提交副本数据库恢复
背景
AOHA共有3个实例组成,分工如下
sql01:主库
sql02:同步提交从副本
sql03:异步提交从副本
准备工作:
使用 SSMS 图形界面将有问题的数据库从高可用集群中移除:
打开 SSMS,连接到 主副本。
展开 可用性组,找到对应的可用性组。
展开可用性组中的 可用性数据库。
右键需要删除的数据库(如 DatabaseA),选择 从可用性组中移除。
右击可用性组,选择属性->General,在Availability Databases中选择需要删除的数据库,然后点击 Remove。
故障数据库重新加入高可用集群方法:
1.1 执行完整数据库备份
在主副本 sql01 的 SQL Server Management Studio (SSMS) 中,连接到主数据库实例。
运行以下 T-SQL 语句,创建完整备份:
BACKUP DATABASE [test_DB]
TO DISK = 'E:\SQLData\Backup\test_DB.Full.202502111020.bak'
WITH INIT, COMPRESSION;
1.2 执行事务日志备份
事务日志备份确保副本能够继续从主副本接收日志:
BACKUP LOG [test_DB]
TO DISK = 'E:\SQLData\Backup\test_DB.Log.202502111024.trn'
WITH INIT, COMPRESSION;
将备份文件复制到2个从副本实例的服务器上。
- 删除当前从副本的数据库
如果从副本数据库处于 Recovery Pending 状态,需要先删除该数据库。
在辅助副本的 SSMS 中,右键问题数据库(如 DatabaseA),选择 删除。
确保数据库未被任何其他服务占用,确认删除。
ALTER DATABASE [test_DB]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [test_DB];
- 在辅助副本上恢复数据库
在辅助副本上使用主副本的备份文件恢复数据库。
3.1 恢复完整备份(NORECOVERY)
在辅助副本的 SSMS 中,连接到实例。
恢复完整备份:
Databases->Restore Database,
Source选择Device,
然后选择全量备份文件目录'E:\Backup\test_DB.Full.202502111024.bak',
Options中,Recovery state 选择"RESTORE WITH NORECOVERY"
然后点"OK"执行数据库恢复;
3.2 恢复事务日志(NORECOVERY)
使用主副本的事务日志备份恢复日志:
-- sql02 (同步提交副本)
RESTORE LOG [test_DB]
FROM DISK = 'E:\shareDir\test_DB.Log.202504011612.trn'
WITH NORECOVERY;
-- sql03 (异步提交副本)也需要恢复数据库
RESTORE LOG [test_DB]
FROM DISK = 'E:\Backup\test_DB.Log.202504011612.trn'
WITH NORECOVERY;
- 将数据库重新添加到可用性组
在辅助副本上恢复数据库后,需要将其重新添加到可用性组,通过如下SQL脚本配置即可。
4.1 在主库上将 Da1 添加到 Always On 可用性组
USE master;
ALTER AVAILABILITY GROUP [testAG] ADD DATABASE test_DB;
4.2 在从库 sql02 上加入 Always On
USE master;
ALTER DATABASE test_DB SET HADR AVAILABILITY GROUP = [testAG];
4.3 在从库 sql03 上加入 Always On
USE master;
ALTER DATABASE test_DB SET HADR AVAILABILITY GROUP = [testAG];