自动故障转移

只有在高安全性模式(“具有自动故障转移功能的高安全性模式”)下运行并且具有见证服务器的数据库镜像会话支持自动故障转移。在具有自动故障转移功能的高安全性模式下,同步数据库后,如果主体数据库变得不可用,则会发生自动故障转移。自动故障转移将导致镜像服务器接管主体服务器的角色,并使其数据库的副本联机以作为主体数据库。因为每个在主体数据库中提交的事务同时也在镜像数据库中提交,所以需要使数据库保持同步以防止在故障转移过程中丢失数据。

为了增强自动故障转移的可靠性,镜像数据库和主体数据库必须驻留在不同的计算机上。

自动故障转移所需条件

自动故障转移需要下列条件:

  • 数据库镜像会话必须在高安全性模式下运行,并且必须处理见证服务器。有关详细信息,请参阅同步数据库镜像(高安全性模式)

  • 镜像数据库必须已经同步。这将保证发送到镜像服务器的所有日志都已写入磁盘。

  • 主体服务器已中断了与其余数据库镜像配置的通信,而镜像服务器和见证服务器将保留仲裁。但是,如果所有服务器实例都已中断通信,而见证服务器和镜像服务器稍后重新建立通信,则不会发生自动故障转移。

    注意注意

    有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性

  • 镜像服务器已检测到丢失了主体服务器。

    镜像服务器检测主体服务器故障的方式取决于故障是硬故障还是软故障。有关详细信息,请参阅数据库镜像期间可能出现的故障

自动故障转移的原理

在上述条件下,自动故障转移将启动以下操作顺序:

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

  2. 见证服务器和镜像服务器将主体服务器注册为不可用。

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

    注意注意

    应用日志所需的时间取决于系统的速度、最近的工作负载以及重做队列中的日志量。

  4. 前一个镜像数据库作为新的联机主体数据库,恢复通过尽快回滚未提交的事务将这些事务全部清除。锁将隔离这些事务。

  5. 当前一个主体服务器重新联接到会话时,它将认定其故障转移伙伴现在拥有主体角色。前一个主体服务器接管镜像角色,并将其数据库作为镜像数据库。新的镜像服务器会尽快将新的镜像数据库与主体数据库同步。新的镜像服务器重新同步数据库后,就可以再次执行故障转移,但按反向执行。

下图说明了自动故障转移的一个实例。

自动故障转移

最初,所有三个服务器都已连接(会话具有完全仲裁)。Partner_A 为主体服务器,Partner_B 为镜像服务器。Partner_A(或 Partner_A 上的主体数据库)变得不可用。见证服务器和 Partner_B 都将认定主体服务器不可用,会话保留仲裁。Partner_B 变为主体服务器,并将其数据库的副本用作新的主体数据库。最后,Partner_A 重新连接到会话并发现 Partner_B 现在拥有主体角色。Partner_A 接下来将接管镜像角色。

执行故障转移后,客户端必须重新连接到当前的主体数据库。有关详细信息,请参阅连接客户端与镜像数据库

注意注意

当发生故障转移时,使用 Microsoft 分布式事务处理协调器准备就绪但尚未提交的事务被认为在数据库故障转移后已中止。

使用 SQL Server Management Studio 禁用自动故障转移

若要禁用自动故障转移,请打开**“数据库属性镜像”**页,并通过选择下列选项之一更改操作模式:

更改运行模式

使用 Transact-SQL 禁用自动故障转移

在数据库镜像会话过程中,数据库所有者可以随时通过关闭见证服务器来禁用自动故障转移。

关闭见证服务器