可用性组 & 数据库镜像 自动页修复类型及原理

数据库镜像和 Always On 一般以等效方式处理 I/O 错误,并且镜像已是后续不再支持的技术,下面主要以Always On介绍。

Always On支持自动页修复。 在某些类型的错误导致页损坏,使其无法读取后,坏页节点会自动从正常节点请求该坏页的新副本。 如果请求成功,会自动替换坏页,修复成功。

自动页修复有别于 DBCC 修复,自动页修复会保留所有数据。相反,DBCC REPAIR_ALLOW_DATA_LOSS 选项更正错误可能需要删除某些页(从而会删除数据)。

一、 会触发自动页修复的错误类型

自动页修复只尝试修复特定数据文件中的页,即由于下表中的某一错误而失败的数据文件。

错误号说明导致自动页修复尝试的实例
823仅当操作系统对数据执行循环冗余检查 (CRC) 失败时才执行此操作。ERROR_CRC。 此错误的操作系统值为 23。
824逻辑错误。逻辑数据错误,例如残缺写或错误的页校验和。
829页已标记为还原已挂起(restore pending)。全部。

若要查看最近的 823 CRC 错误和 824 错误,请参阅 msdb 数据库中的 suspect_pages 表。

自动页修复是一个运行在后台的异步进程。请求不可读的页的数据库操作将失败,并且不管导致失败的条件是什么均返回错误代码。如果遇到 SQL Server 823、824 或 829报错,应暂停操作,稍后重试。

二、 无法进行自动页修复的页类型

  • page ID=0(文件头页)

  • page ID=9(数据库引导页)

  • 分配页:GAM、SGAM、PFS

三、 主库页面损坏

SQL Server Always On可用性组中的自动页面修复

在主库中,仅当数据库处于 SYNCHRONIZED 状态且主库仍向从库发送日志记录时,才会尝试自动页修复。

对于Always On,自动页修复尝试步骤如下:

  • 当主库中的数据页上发生读取错误时,主库将相应的错误插入msdb.suspect_pages表

  • 主库将向所有从库广播请求,并且从第一个响应的从库中获取该页。此请求指定当前在刷新日志末尾的页 ID 和 LSN,并将坏页标记为"restore pending",这将使它在尝试自动页修复期间不可访问,访问会遇到报错 829(页已标记为restore pending)。

  • 收到页请求后,从库将等待,直到将日志apply到请求中指定的 LSN 处。然后,从库尝试在其数据库副本中访问此页。如果可以访问,则从库将此页的副本发送到主库。否则,从库将向主库返回错误,自动页修复失败。

  • 主库收到从库发来的修复页后进行处理和替换。

  • 修复坏页后,此页将在suspect_pages表中被标记为已还原 (event_type= 5)。

  • 如果页面损坏问题导致出现延迟的事务,修复后,主库将尝试解决这些事务。

四、 从库页面损坏

整体自动页面修复过程

对于Always On,自动页修复尝试步骤如下:

  • 如果从库在apply日志时遇到坏页错误,则从库将进入 SUSPENDED 状态并将相应的错误插入msdb.suspect_pages表

  • 从库向主库请求此页副本。

  • 主库尝试在其数据库副本中访问此页。如果可以访问,则将此页副本发送到从库。

  • 如果从库收到了请求的页副本,将尝试继续apply日志,恢复同步。

  • 如果修复了坏页,此页将在suspect_pages表中被标记为已还原 (event_type= 4)。

  • 如果从库未从主库收到请求的页,则自动页修复尝试失败,从库将保持挂起。如果手动恢复从库,坏页将在被apply到时再次导致错误。

五、 如何查看自动页修复记录

下面的视图返回对应于给定可用性数据库或镜像数据库上最新自动页修复尝试的行,每个数据库最多可对应 100 行。

参考

可用性组和数据库镜像的自动页修复 - SQL Server Always On | Microsoft Docs

Automatic Page Repair in SQL Server Always On Availability Groups

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值