强制故障转移后将旧主节点作为辅助节点重新加入SQL Server Always On可用性组
解决方案:旧主节点重新加入新主节点(允许数据丢失)
针对三节点SQL Server Always On可用性组中旧主节点node-1因网络孤立、独立写入后无法同步的场景,在可接受node-1数据丢失的前提下,可通过以下步骤无需删除数据库重新加入新主节点node-2:
步骤1:在node-1上清除本地AG关联并重置HADR状态
- 先将node-1上的可用性组脱机:
ALTER AVAILABILITY GROUP [AG_NAME] OFFLINE; - 移除node-1上该可用性组的本地实例关联(仅清除AG元数据,不删除数据库文件):
ALTER AVAILABILITY GROUP [AG_NAME] REMOVE ON INSTANCE 'node-1'; - 重置数据库的HADR状态,脱离原有AG绑定:
ALTER DATABASE [AG_DB_NAME] SET HADR OFF;
步骤2:将node-1重新添加至可用性组
- 在新主节点node-2上执行命令,添加node-1为副本(根据实际环境调整端点、可用性模式等参数):
ALTER AVAILABILITY GROUP [AG_NAME] ADD REPLICA ON 'node-1' WITH ( ENDPOINT_URL = 'TCP://node-1:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, -- 可按需改为SYNCHRONOUS_COMMIT FAILOVER_MODE = MANUAL, -- 按需调整自动/手动故障转移 BACKUP_PRIORITY = 50, SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY) ); - 回到node-1,执行加入可用性组的命令:
ALTER AVAILABILITY GROUP [AG_NAME] JOIN; - 重新启用数据库的HADR关联,开始从node-2同步数据:
ALTER DATABASE [AG_DB_NAME] SET HADR AVAILABILITY GROUP = [AG_NAME];
步骤3:验证同步状态
- 在node-2上执行查询,确认同步状态:
SELECT ar.replica_server_name, dbs.database_name, drs.synchronization_state_desc, drs.last_hardened_lsn FROM sys.dm_hadr_database_replica_states drs JOIN sys.availability_databases_cluster dbs ON drs.group_database_id = dbs.group_database_id JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id WHERE dbs.database_name = 'AG_DB_NAME'; - 等待
synchronization_state_desc变为SYNCHRONIZING或SYNCHRONIZED,确认数据同步正常。
注意事项
- 此操作会丢弃node-1上网络故障期间的独立写入数据,需提前确认业务可接受该损失。
- 操作前确保node-1与node-2之间网络连通、SQL端点配置正常、服务账户权限充足。
- 若数据库文件存在损坏,需先修复后再执行上述步骤。
内容的提问来源于stack exchange,提问作者Neaj Morshad
相关产品推荐
相关产品推荐

