Azure SQL 托管实例中的数据完整性

适用于:Azure SQL 托管实例

Azure负责管理Azure SQL 托管实例中的数据完整性。 虽然传统技术存在于DBA中用于监控数据完整性并从SQL Server数据库损坏中恢复,但Microsoft SQL工程团队开发了新技术,能够自动处理某些类型的损坏且不丢失数据。 服务利用这些技术在可避免的情况下避免数据丢失和停机。

本文概述了一些这些技术、它们的工作原理,以及它们如何影响客户,帮助他们了解应采取哪些措施来保护Azure SQL 托管实例中的数据。

Azure如何管理数据完整性

保护Azure SQL 托管实例中的数据完整性涉及多种技术和不断演进的方法:

  • 广泛的数据完整性错误警报监控。 SQL 数据库引擎 会对所有错误和未处理异常发出警报,这些异常表明数据完整性存在问题。 工程团队负责处理和调查这些警报。

  • I/O 系统“丢失写入”检测功能。 数据库引擎还具有一项附加功能,用于检测已观察到的物理损坏问题最常见的原因:I/O 系统中的“丢失写入”。 该功能用于追踪页面写入及其相关的 LSN(日志序列号)。 随后从磁盘读取的数据页会与该页的预期 LSN 进行比较。 如果磁盘上的 LSN 与预期值不一致,则说明该页面已过时,并会立即向工程团队发出警报。

  • 自动页面修复。 部分服务层级提供数据库副本以实现业务连续性。 该服务随后利用自动页面修复,类似于可用性组中使用的技术。 如果副本因数据完整性问题无法读取页面,服务会从另一个副本中获取该页面的全新副本,替换不可读取的页面,避免数据丢失或客户停机。

  • 静态和传输中的数据完整性。 服务中的所有数据库都配置为使用 CHECKSUM 设置来验证页,该设置会计算整页的校验和,并将其存储在页眉中,以便在读取时进行验证。 除 TCP/IP 提供的基本传输层校验和外,所有通信还会使用传输层安全(TLS)。

  • 备份和恢复完整性检查。 Azure SQL 托管实例 在每次服务托管的备份和恢复操作中执行页面验证。 对于客户发起的还原操作,如果源数据库将 PAGE_VERIFY 选项设置为 CHECKSUM,则会执行页验证。 Azure SQL 托管实例 服务中的所有数据库都已CHECKSUM启用。 发现任何问题都会立即通知工程团队。

Azure如何处理数据完整性事件

Azure处理错误结果或严重性最高的损坏事件。 该公司提供来自所有 Azure 工程团队的 24×7 支持。 处理完整性事件时,目标是尽量减少不可用性并减少数据丢失。

系统数据完整性问题

Azure在不通知客户的情况下更正不影响客户数据或数据库可用性的问题。 例如自动页面修复能解决的问题,或内部数据库元数据或遥测数据的损坏,但不影响客户数据或查询结果。

客户数据完整性问题

当Azure检测到错误的结果或客户数据损坏问题时,Azure执行以下操作:

  1. 在确认检测到相关问题后,尽最大努力尽快联系客户,并遵守隐私法律法规。
  2. 如果建立联系,直接与客户沟通,说明损坏范围,概述恢复选项,并允许客户选择最适合其应用和场景的方案。
  3. 在可能的情况下,帮助客户了解对其应用的影响范围,例如识别数据损坏是否导致应用程序以意外方式更改了其他数据。

Azure使用各种方法和与客户协调的步骤修复数据损坏。 它不会尝试在未经客户批准的情况下进行可能导致数据丢失的修复。 客户无法在 Azure SQL 托管实例 中执行DBCC CHECKDB修复选项,因为你无法将数据库置入 SINGLE_USER Mode 模式。 然而,Microsoft SQL 团队可以采取包括但不限于以下修复措施:

  • 重新生成索引。 例如,重建一个非集群索引,且基表也没有损坏。
  • 使用DBCC CHECKDB运行REPAIR_REBUILD,在修复不存在数据丢失可能性的情况下。
  • 使用DBCC CHECKDB运行REPAIR_ALLOW_DATA_LOSS,其中修复操作可能会导致部分数据丢失。
  • 对于无法使用 DBCC CHECKDB 修复数据完整性问题的场景,工程师可能会使用时间点恢复,将系统恢复到数据完整性问题发生之前的时间点,然后手动重放事务日志中的相关事务。 这种技术适用的一个例子是:事务日志损坏到了会阻止所有事务自动重放、但不会损坏客户数据的程度。

工程团队会对导致错误结果或数据损坏的问题进行详细的事后分析。 团队密切跟踪因问题产生的维修项目。 这些事后分析带来了许多重大改进,包括之前提到的“丢失写入”功能。

由客户发起的完整性检查

除了服务现有的监控和保护外,您还可以选择执行用户发起的完整性检查,作为额外的保护层。 例如,你可以在可使用此命令的数据库产品中手动运行 DBCC CHECKDB

客户反馈与不断演变的方法论

Azure SQL工程团队定期审查并增强服务的数据完整性问题检测能力。 虽然数据完整性错误很少见,但如果您在收到Azure支持通知前遇到错误,请提交支持投诉。

如果您对Microsoft的数据完整性战略有反馈,工程团队非常欢迎您的意见。 如需联系工程团队,提供反馈或意见,请参见 https://aka.ms/sqlfeedback。 您的反馈有助于Microsoft改进现有数据完整性保护能力并开发新的数据完整性保护能力。