SQL 镜像故障转移期间数据去哪里了?

SQL 镜像故障转移期间数据去哪里了?

我正要设置 SQL 镜像,但有一件事我还没搞清楚。如果我将 DBA(主体)镜像到 DBB(镜像),而 DBA 离线,它将自动切换到 DBB。但据我了解,DBB 上发生的任何更新都不会出现在 DBA 上……所以当 DBA 重新上线并再次处于活动状态时,中断期间的所有更新都将丢失?是这样吗?还是我遗漏了什么?

谢谢!保罗

答案1

在某些情况下,主服务器会发生某些事情,如果不重新建立镜像会话,它将无法同步。但如果您处于高安全模式并设置了见证服务器,DBA 应该能够赶上 DBB。

在线书籍中的角色转换部分对此进行了更详细的解释“自动故障转移的工作原理”

  1. 如果主体服务器仍在运行,它会将主体数据库的状态更改为 DISCONNECTED,并断开所有客户端与主体数据库的连接。

  2. 见证服务器和镜像服务器记录主服务器不可用。

  3. 如果重做队列中有任何日志正在等待,则镜像服务器将完成镜像数据库的前滚。

  4. 前一个镜像数据库将作为新的主数据库上线,恢复会尽快回滚所有未提交的事务,并清除这些事务。锁会隔离这些事务。

  5. 当以前的主服务器重新加入会话时,它会识别出其故障转移伙伴现在拥有主角色。以前的主服务器承担镜像角色,使其数据库成为镜像数据库。新的镜像服务器会尽快将新的镜像数据库与主数据库同步。一旦新的镜像服务器重新同步了数据库,就可以再次进行故障转移,但方向相反。

因此,在您的情况下,如果/当 DBA 重新上线时,它最终应该赶上 DBB,但需要多长时间取决于系统的速度、最近的工作负载以及重做队列中的日志量。

答案2

您忽略了一点,MS 程序员并不是十足的白痴。当 DBA 回来时,它知道它已经过时了,并且在从 B 那里获取数据之前不会回答。A 没有“真正的”优先权,尤其是在有主体可用的情况下。B 会在那里,并且知道它有更新的授权。

如果 A 继续回答并且 B 上的数据丢失,那么该功能将完全无用。

相关内容