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

物理、作系统或 SQL Server 问题可能会导致数据库镜像会话失败。 数据库镜像不会定期检查 Sqlservr.exe 依赖的组件,以验证它们是否正常运行或已失败。 但是,对于某些类型的故障,受影响的组件将报告错误 Sqlservr.exe。 由另一个组件报告的错误称为“硬错误 ”。 为了检测那些否则可能会被忽视的故障,数据库镜像实施了自己的超时机制。 发生镜像超时时,数据库镜像假定发生故障并声明 软错误。 但是,在 SQL Server 实例级别发生的一些故障不会导致镜像超时,并且可能未检测到。

重要

数据库镜像会话中无法检测到镜像数据库以外的数据库中的故障。 此外,除非由于数据磁盘故障而重启数据库,否则不太可能检测到数据磁盘故障。

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

由于硬错误而导致的失败

硬性错误的可能原因包括(但不限于)以下条件:

  • 连接或网线断开

  • 网卡出现故障

  • 路由器更改

  • 防火墙更改

  • 端点重新配置

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

  • 操作系统或进程故障

例如,当主体数据库上的日志驱动器无响应且失败时,作系统会通知 Sqlservr.exe 发生严重错误。

某些组件(如网络组件和某些IO子系统)有自己的超时时间来确定故障发生。 此类超时与数据库镜像无关,数据库镜像不了解它们,并且完全不知道它们的行为。 在这些情况下,超时延迟会增加从失败到数据库镜像接收到由此产生的硬错误这段时间的间隔。

注释

数据库镜像中仅对软错误情况进行主动错误检查。 有关详细信息,请参阅本主题后面的“软错误导致的故障”。

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

  • DNS 不起作用。

  • 网线被拔掉。

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

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

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

  • 重新启动基于 Windows 的服务器。

注释

镜像不会防范特定于客户端访问服务器的问题。 例如,假设公共网络适配器处理与主体服务器实例的客户端连接,而专用网络接口卡处理服务器实例之间的所有镜像流量。 在这种情况下,公共网络适配器的失败会阻止客户端访问数据库,但数据库将继续镜像。

由于软错误而导致的失败

可能导致镜像超时的条件包括(但不限于)以下内容:

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

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

  • Windows 服务器超时。

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

镜像 Time-Out 机制

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

若要使连接保持打开状态,服务器实例必须在定义的超时时间段内接收该连接的 ping,以及发送另一个 ping 所需的时间。 在超时期限内收到 ping 指示连接仍是开放的,且服务器实例正在通过此连接进行通信。 接收到 ping 信号时,服务器实例将重置该连接上的超时计数器。

如果在超时期间未在连接上收到 ping,则服务器实例会认为连接已超时。服务器实例关闭超时连接,并根据会话的状态和作模式处理超时事件。

即使其他服务器实际正常运行,超时也被视为失败。 如果会话的超时值对于任一伙伴来说太短而无法正常响应,则可能会发生误判故障。 如果一个服务器实例成功联系另一个服务器实例,其响应时间太慢,以至于在超时期限到期之前不会收到其 ping作,则会发生错误失败。

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

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

查看当前超时值

对错误进行响应

无论错误类型如何,根据实例的角色、会话的作模式以及会话中任何其他连接的状态,检测错误的服务器实例都会相应地做出响应。 有关于丢失伙伴时的详细信息,请参阅 数据库镜像操作模式

另请参阅

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