You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动故障转移后恢复按钮禁用,无见证时镜像恢复失败,咨询检查点

数据库镜像故障排查与检查点解析

你的两个镜像问题排查

1. 手动故障转移后恢复按钮禁用、查询无法恢复

手动故障转移完成后,原主库会切换为镜像角色,原镜像库成为新主库。这时候恢复按钮禁用是正常情况——恢复按钮仅在镜像会话处于「挂起」状态时才可用,而正常的手动故障转移会让镜像会话保持同步/异步运行状态,所以按钮自然是灰的。

如果你的需求是把角色切换回原来的主库,别用恢复按钮,应该再次执行手动故障转移(前提是当前新主库处于同步状态且可正常访问)。另外,如果发现查询无法正常执行,建议先检查:

  • 新主库的数据库状态是否为ONLINE;
  • 原主库(现在的镜像库)是否有未同步的事务,可通过以下查询确认状态:
    SELECT mirroring_state_desc, mirroring_role_desc 
    FROM sys.database_mirroring 
    WHERE database_id = DB_ID('你的数据库名');
    

2. 无见证服务器时执行ALTER DATABASE ... SET PARTNER RESUME;后镜像无法恢复

无见证服务器的场景下,镜像会话要么是高安全模式(无自动故障转移),要么是高性能模式。执行恢复命令后没反应且按钮禁用,你可以按以下步骤排查:

  • 先查会话状态:执行这条查询确认当前镜像状态:
    SELECT database_id, name, mirroring_state_desc, mirroring_role_desc 
    FROM sys.database_mirroring 
    WHERE database_id = DB_ID('你的数据库名');
    
    如果状态是SYNCHRONIZING或SYNCHRONIZED,说明会话已经在正常运行,恢复按钮禁用是合理的;
  • 如果状态还是SUSPENDED:大概率是日志链断裂了。这时候需要:
    1. 在当前主库备份最新的事务日志:
      BACKUP LOG 你的数据库名 TO DISK = 'D:\Backup\LatestLog.bak';
      
    2. 在镜像库上还原这个日志备份(必须用NORECOVERY):
      RESTORE LOG 你的数据库名 FROM DISK = 'D:\Backup\LatestLog.bak' WITH NORECOVERY;
      
    3. 再次执行恢复命令:
      ALTER DATABASE 你的数据库名 SET PARTNER RESUME;
      
  • 额外检查:确认主库和镜像库之间网络连通正常,SQL Server服务都在运行,镜像端点的权限配置正确(比如是否允许对方服务器连接)。

什么是检查点?

检查点是SQL Server里的关键后台机制,核心作用就是把内存中已经修改但还没写入磁盘的数据页(也就是「脏页」)刷到磁盘,同时更新事务日志,标记一个恢复起始点。它的核心价值在于:

  • 大幅缩短数据库恢复时间:如果SQL Server意外崩溃重启,恢复过程只需要从最近的检查点开始,重做之后的事务、回滚未完成的事务,不用从头扫描整个事务日志;
  • 释放内存资源:脏页写入磁盘后,对应的内存空间可以被重新分配给其他操作使用。

常见的检查点类型有:

  • 自动检查点:SQL Server会根据「恢复间隔」的配置自动触发,确保数据库崩溃后的恢复时间不超过设定的阈值;
  • 手动检查点:通过执行CHECKPOINT命令手动触发,比如在收缩数据库、做重大维护操作前,手动触发检查点可以减少后续恢复风险;
  • 延迟检查点:在SQL Server 2012及以后版本中,自动检查点会延迟到系统负载较低时执行,避免对业务性能造成影响;
  • 内部检查点:由SQL Server内部操作触发,比如备份数据库、切换数据库恢复模式、创建索引等场景都会自动触发。

内容的提问来源于stack exchange,提问作者Pankaj Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:12:27