同步数据库镜像(高安全性模式)

当事务安全设置为 FULL 时,数据库镜像会话便会在初始同步阶段后以高安全性模式同步运行。本主题介绍了为同步操作配置的数据库镜像会话的详细信息。本主题假定您熟悉基本的数据库镜像操作概念。有关详细信息,请参阅数据库镜像会话

若要实现会话的同步操作,镜像服务器必须将镜像数据库与主体数据库同步。会话开始时,主体服务器开始将其活动日志发送到镜像服务器。镜像服务器将所有传入日志记录尽快写入磁盘。当所有接收到的日志记录写入磁盘后,数据库便会立即进行同步。只要伙伴保持通信,数据库就保持同步状态。

注意注意

若要监视数据库镜像会话中的状态更改,请使用 Database Mirroring State Change 事件类。有关详细信息,请参阅 Database Mirroring State Change 事件类

同步结束后,在主体数据库中提交的每个事务也在镜像服务器上提交,因此确保数据受到保护。其实现方法是等待在主体数据库中提交事务,直到主体服务器收到来自镜像服务器的消息:镜像服务器已将事务的日志镜像到磁盘。注意,等待此消息会增加事务的滞后时间。

同步所需的时间实质上取决于会话开始时镜像数据库滞后于主体数据库的时间(按最初从主体服务器收到的日志记录数计量)、主体数据库的工作负荷和镜像系统的速度。在会话同步后,镜像数据库中尚未重做的镜像日志仍处于重做队列中。有关详细信息,请参阅数据库镜像会话

镜像数据库同步后,两个数据库副本的状态将立即改为 SYNCHRONIZED。

同步操作按下列方式维护:

  1. 从客户端收到事务时,主体服务器将事务的日志写入事务日志中。

  2. 主体服务器将事务写入数据库中,同时将日志记录发送到镜像服务器。主体服务器等待来自镜像服务器的确认,然后向客户端发送下列任一确认消息:事务提交或回滚。

  3. 镜像服务器将日志镜像到磁盘并向主体服务器返回确认。

  4. 收到来自镜像服务器的确认时,主体服务器将向客户端发送一条确认消息。

高安全性模式通过要求数据在两个位置间保持同步来保护数据。所有提交的事务都保证受到保护,写入镜像服务器的磁盘上。

不带自动故障转移功能的高安全性模式

下图显示了不带自动故障转移功能的高安全性模式的配置。配置仅包括两个伙伴。

不使用见证服务器的伙伴通信

当伙伴连接在一起并且数据库已同步时,支持手动故障转移。如果镜像服务器实例出现故障,则主体服务器实例不会受到影响并且公开运行(即,未镜像数据)。如果主体服务器丢失,则镜像会挂起,但可以将服务强制到镜像服务器(可能造成数据丢失)。有关详细信息,请参阅强制服务(可能造成数据丢失)

具有自动故障转移的高安全性模式

自动故障转移通过确保在丢失一个服务器之后仍向数据库提供服务来提供高可用性。自动故障转移要求会话具有第三个服务器实例(“见证服务器”),理想情况是见证服务器驻留在第三台计算机上。下图显示了支持自动故障转移的高安全性模式会话的配置。

会话的见证服务器和伙伴双方

与这两个伙伴不同的是,见证服务器并不能用于数据库。见证服务器通过验证主体服务器是否已启用并运行来仅支持自动故障转移。只有在镜像服务器和见证服务器与主体服务器断开连接之后而保持相互连接时,镜像服务器才启动自动故障转移。

设置见证服务器时,会话需要“仲裁”(允许数据库可用的至少两个服务器实例之间的关系)。有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性自动故障转移。有关详细信息,请参阅数据库镜像见证服务器

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

  • 数据库已同步。

  • 发生故障时所有三个服务器实例均处于连接状态,并且见证服务器和镜像服务器保持连接状态。

丢失伙伴会产生以下影响:

  • 如果主体服务器变得不可用,则在上述条件下将发生自动故障转移。镜像服务器切换为主体角色,并提供其数据库作为主体数据库。

  • 如果主体服务器在这些条件不满足时变得不可用,则可能会强制服务(可能造成数据丢失)。有关详细信息,请参阅强制服务(可能造成数据丢失)

  • 如果只有镜像服务器变得不可用,则主体服务器和见证服务器将继续运行。

如果会话丢失见证服务器,则仲裁需要两个伙伴。如果任何一个伙伴失去仲裁,两个伙伴都将失去仲裁且在重新建立仲裁之前数据库将不可用。此仲裁要求确保没有见证服务器时数据库从不“公开”运行,即从不执行数据镜像。

注意注意

如果您希望见证服务器在很长一段时间内保持断开,则我们建议您在见证服务器变为可用之前将其从会话中删除。