SQL Server 镜像

数据库镜像(SQL Server Mirroring)从SQL Server 2005 SP2开始引入,虽然从SQL Server 2008开始被列为“将会被弃用”的功能,并在后续的版本中由 Always On 可用性组代替。但是由于其有很多优势,一直被广泛使用至今。

“数据库镜像” 也是一种提高 SQL Server 数据库的可用性的解决方案。 镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库。

概念

数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎服务器实例上。 通常,这些服务器实例驻留在不同位置的计算机上。 启动数据库上的数据库镜像操作时,在这些服务器实例之间形成一种关系,称为“数据库镜像会话” 。其中一个服务器实例(主体服务器)提供数据库服务给客户端。 另一个服务器实例则根据镜像会话的配置和状态,充当热备或温备服务器(镜像服务器)。在“数据库镜像会话 ”中,主体服务器和镜像服务器作为“伙伴 ”进行通信和协作。 两个伙伴在会话中扮演互补的角色:“主体角色” 和“镜像角色” 。 在任何给定的时间,一个伙伴仅可以扮演一个角色, 拥有主体角色的伙伴称为“主体服务器” ,其数据库副本为当前的主体数据库。 拥有镜像角色的伙伴称为“镜像服务器” ,其数据库副本为当前的镜像数据库。 如果数据库镜像部署在生产环境中,则主体数据库即为“生产数据库”。其中,还有另一类可选服务器“见证服务器”用于监控主体服务器和镜像服务器,提供自动故障转移功能。

运行模式

数据库镜像会话以同步操作或异步操作运行。 在异步操作下,事务不需要等待镜像服务器将日志写入磁盘便可提交,这样可最大程度地提高性能。 在同步操作下,事务将在伙伴双方处提交,但会延长事务滞后时间。
SQL Server支持两种镜像运行模式。 一种是高安全性模式,它支持同步操作。在该模式下,当会话开始时,镜像服务器将使镜像数据库尽快与主体数据库同步。 一旦同步了数据库,事务将在伙伴双方处提交,这会延长事务滞后时间。

SQL Server 镜像_第1张图片
高安全模式

高安全模式支持标准版和企业版,并且主体和镜像服务器必须是相同版本。见证服务器的作用是验证给定的伙伴服务器是否已启动并运行。 如果镜像服务器与主体服务器断开连接,但见证服务器仍与主体服务器保持连接,则镜像服务器无法启动故障转移。此外,如果见证服务器宕机了,也仅仅是不能自动Failover而已,不影响镜像环境。

第二种是高性能模式,以异步方式运行。 镜像服务器尝试与主体服务器发送的日志记录保持同步。 镜像数据库可能稍微滞后于主体数据库。 但是,数据库之间的时间间隔通常很小。 但是,如果主体服务器的工作负荷过高或镜像服务器系统的负荷过高,则时间间隔会增大。在高性能模式中,主体服务器向镜像服务器发送日志记录之后,会立即再向客户端发送一条确认消息。 它不会等待镜像服务器的确认。 这意味着事务不需要等待镜像服务器将日志写入磁盘便可提交。 此异步操作允许主体服务器在事务滞后时间最小的条件下运行,但可能会丢失某些数据。

SQL Server 镜像_第2张图片
高性能模式

所有数据库镜像会话都只支持一台主体服务器和一台镜像服务器。不管使用何种模式,数据库都必须配置为完整恢复模式

对比
运行模式 同步模式 版本要求 数据丢失 SAFETY选项 性能影响 恢复速度 故障转移
高安全 同步 标准/企业 零丢失 FULL 网络可能影响性能 可自动
高性能 异步 企业 有可能丢失数据 OFF 影响较小 根据需要提交的事务量而定 不可自动

镜像中的事务日志

数据库镜像涉及尽快将对主体数据库执行的每项插入、更新和删除操作“重做 ”到镜像数据库中。 重做通过将活动事务日志记录的流发送到镜像服务器来完成,这会尽快将日志记录按顺序应用到镜像数据库中。 与逻辑级别执行的复制不同,数据库镜像在物理日志记录级别执行。 从 SQL Server 2008开始,在事务日志记录的流发送到镜像服务器之前,主体服务器会先将其压缩。 在所有镜像会话中都会进行这种日志压缩。
数据库所有者可以随时暂停会话。 暂停会话时,主体服务器不会向镜像服务器发送任何新的日志记录。 所有这些记录将保持活动状态,并堆积在主体数据库的事务日志中。 只要数据库镜像会话保持暂停状态,事务日志就不会被截断。 因此,如果数据库镜像会话暂停时间过长,则可能会使该日志填满。


小D笔记

镜像,通俗来讲就是一面镜子,是“数据”在灾备环境中的“成像”,具备以下特性:

  • 一致性,包括库名、数据文件和日志文件的存放路径都要与主体数据库保持一致。
  • 唯一性,每个数据库只能有一个镜像副本。
  • 看得到,却“用不了”,镜像库在没有做任何处理时是不可访问的。数据库的故障转移对客户端不是完全透明的,因为主体和镜像是两个独立的SQL服务实例,有不同的网络标识。
  • 其他成本,需要额外维护实例级的对象在主体和镜像实例间的同步,包括登录账户、作业、链接服务器等

你可能感兴趣的:(SQL Server 镜像)