数据库镜像期间可能出现的故障

适用于:SQL Server

物理故障、操作系统故障或 SQL Server 故障都可能导致数据库镜像会话失败。 数据库镜像不会定期检查 Sqlservr.exe 所依赖的组件来验证组件是在正常运行还是已出现故障。 但对于某些类型的故障,受影响的组件将向 Sqlservr.exe 报告错误。 由另一个组件报告的错误称为“硬错误 ”。 为了检测其他原本可能不会被察觉的故障,数据库镜像实现了自己的超时机制。 发生镜像超时时,数据库镜像假定已发生故障并声明一个“软错误”。 然而,发生在 SQL Server 实例级别的某些故障不会导致镜像超时,因此可能无法被检测到。

重要

在数据库镜像会话中无法检测到数据库(除镜像数据库之外)故障。 此外,也无法检测到数据磁盘故障,除非数据库因为数据磁盘故障而重新启动。

因此,错误检测的速度以及镜像会话对故障的反应时间取决于是硬错误还是软错误。 系统可以立即报告某些硬错误,例如网络故障。 但在某些情况下,组件特定的超时时间可能会导致某些硬错误的报告延迟。 对于软错误,镜像超时期限的长度决定了错误检测的速度。 默认情况下,此期限为 10 秒钟。 这是建议的最小值。

硬错误导致的故障

可能的硬错误原因包括(但不限于)下列几种情况:

  • 连接或导线断开

  • 网卡出现故障

  • 路由器变更

  • 防火墙更改

  • 端点重新配置

  • 事务日志驻留的驱动器丢失

  • 操作系统或进程故障

例如,如果主体数据库中的日志驱动器停止响应或失败,操作系统会通知 Sqlservr.exe 出现严重错误。

某些组件(例如网络组件和某些 IO 子系统)具有各自的超时机制,用于判定是否发生故障。 这些超时独立于数据库镜像,数据库镜像并不知道这些超时的存在,也完全不了解它们的行为。 在这些情况下,超时时间会延长从发生故障到数据库镜像收到由此产生的严重错误之间的时间间隔。

注意

针对数据库镜像执行的唯一主动错误检查只发生在软错误情况下。 有关详细信息,请参阅本主题后面的“软错误导致的故障”。

若要了解网络出现的错误情况,请咨询网络工程师,询问当 TCP 连接发生下列事件时,哪些错误消息会发送到端口:

  • DNS 无法正常工作。

  • 网线被拔掉。

  • Microsoft Windows 防火墙阻止了特定端口。

  • 监视端口的应用程序出现故障。

  • 重命名基于 Windows 的服务器。

  • 重启基于 Windows 的服务器。

注意

镜像无法避免与客户端访问服务器相关的问题。 例如,假设由公用网络适配器处理与主体服务器实例的客户端连接,而由专用网络接口卡处理服务器实例之间的所有镜像通信流量。 此时,尽管数据库可以继续进行镜像,但公用网络适配器的故障将防止客户端访问数据库。

软错误导致的故障

可能导致镜像超时的情况包括(但不限于)以下情况:

  • 诸如 TCP 链接超时、数据包被删除或损坏或数据包顺序错误等网络错误。

  • 不响应的操作系统、服务器或数据库。

  • Windows 服务器超时。

  • 计算资源不足,例如 CPU 或磁盘超负荷运转,事务日志填满,或系统用完内存或线程。 在这些情况下,需要增加超时期限、降低工作负荷或更换硬件以处理相应的工作负荷。

镜像超时机制

由于软错误不能由服务器实例直接检测到,因此,软错误可能导致服务器实例无限期等待。 为了防止发生这种情况,数据库镜像采用了它自己的超时机制,此机制基于镜像会话中的每个服务器实例会在每个开放连接上按固定间隔发送 ping。

要保持连接处于打开状态,服务器实例必须在该连接上于规定的超时时间内收到 ping,并加上再发送一个 ping 所需的时间。 在超时期限内收到 ping 指示连接仍是开放的,且服务器实例正在通过此连接进行通信。 收到 ping 时,服务器实例会重置该连接上的超时计数器。

如果未在超时期限内从此连接上收到 ping,则服务器实例认为此连接已超时。服务器实例将关闭超时连接,然后根据会话的状态和运行模式处理超时事件。

即使其他服务器实际工作正常,超时也被认为是一个故障。 如果会话的超时值太短而不能使任一伙伴做出正常响应,则会产生虚假故障。 如果一个服务器实例成功地与另一个服务器实例实现通信,但后者的响应时间太短,以致于无法在超时期限过期之前接收到 ping,则会产生错误故障。

在高性能模式会话中,超时期限始终为 10 秒钟。 通常这足以避免误报故障。 在高安全性模式会话中,默认超时期限为 10 秒钟,但您可以更改该持续时间。 为避免误报故障,建议将镜像超时时间始终设置为 10 秒或更长。

更改超时值(仅限高安全性模式)

查看当前超时值

处理错误

无论出现何种错误类型,检测到错误的服务器都会根据实例的角色、会话运行模式以及会话中任何其他连接的状态做出相应的响应。 有关丢失伙伴后会发生的情况的信息,请参阅 Database Mirroring Operating Modes

另请参阅

估计角色切换期间的服务中断时间(数据库镜像)
数据库镜像运行模式
数据库镜像会话期间的角色切换 (SQL Server)
数据库镜像 (SQL Server)