管理suspect_pages表(SQL Server)

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 管理 SQL Server 2014 中的 suspect_pages 表。 suspect_pages表用于维护有关可疑页面的信息,并且有助于确定是否需要还原。 suspect_pages表驻留在 msdb 数据库中

当 SQL Server 数据库引擎尝试读取数据页时遇到以下错误之一时,页面被视为“可疑” :

  • 由操作系统发出的循环冗余检查(CRC)引起的823 错误,例如磁盘错误(属于某些硬件错误)

  • 824 错误,如撕裂页(例如任何逻辑错误)

每个可疑页面的页面 ID 记录在 suspect_pages 表中。 数据库引擎记录在常规处理期间遇到的任何可疑页面,例如:

  • 查询必须读取页面。

  • 在执行DBCC CHECKDB操作时。

  • 在进行备份操作期间。

在还原操作、DBCC 修复操作或删除数据库操作期间,suspect_pages 表会根据需要进行更新。

本主题内容

在您开始之前

建议

  • suspect_pages 表中记录的错误

    suspect_pages表中包含每个出现824错误的页面的一行记录,最多限制为1,000行。 下表显示了suspect_pages表中event_type列中记录的错误。

    错误说明 event_type
    由操作系统的 CRC 错误或其他除错误校验和或撕裂页之外的 824 错误(例如,错误的页面 ID)导致的 823 错误。 1
    校验和错误 2
    撕掉的页面 3
    已恢复(页面在被标记为“错误”后被恢复) 4
    已修复(DBCC、AlwaysOn 或镜像已修复页面) 5
    由 DBCC 解除分配 7

    suspect_pages表还会记录暂时性错误。 暂时性错误的来源包括 I/O 错误(例如电缆断开连接)或暂时未能通过重复校验和测试的页面。

  • 数据库引擎如何更新 suspect_pages 表

    数据库引擎对 suspect_pages 表执行以下作:

    • 如果表未满,则每 824 错误更新一次,以指示发生了错误,并递增错误计数器。 如果页面在修复、还原或解除分配后仍出现错误,其 number_of_errors 计数将会递增,并其 last_update 列会被更新。

    • 通过还原或修复操作修复的列出的页面后,该操作将更新 suspect_pages 行,以指示页面已被修复(event_type = 5)或已被还原(event_type = 4)。

    • 如果运行 DBCC 检查,则检查会将任何无错误页面标记为已修复(event_type = 5)或解除分配(event_type = 7)。

  • suspect_pages表的自动更新

    数据库镜像伙伴或 AlwaysOn 可用性副本在尝试从数据文件读取页面失败后更新 suspect_pages 表,原因可能是如下之一。

    • 由操作系统的 CRC 错误导致的 823 错误。

    • 824 错误(逻辑损坏,例如撕裂的页面)。

    以下操作还会自动更新 suspect_pages 表中的行。

    • DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS 会更新 suspect_pages 表,以标记出其已解除分配或修复的每个页面。

    • 完整、文件或页面恢复操作会将页面条目标记为已恢复。

    以下操作会自动从 suspect_pages 表中删除行。

    • 修改数据库删除文件

    • 删除数据库

  • 数据库管理员的维护角色

    数据库管理员负责管理表,主要是通过删除旧行。 suspect_pages表的大小有限,如果填充,则不会记录新错误。 若要防止此表填满,数据库管理员或系统管理员必须通过删除行来手动清除此表中的旧条目。 因此,我们建议定期删除或存档那些 event_type 为"restored"或"repaired"的行,或者 last_update 值较旧的行。

    若要监视suspect_pages表上的活动,可以使用 数据库可疑数据页事件类。 有时会由于暂时性错误将行添加到 suspect_pages 表中。 但是,如果将许多行添加到表中,则 I/O 子系统可能存在问题。 如果您注意到表中的行数突然增加,我们建议您调查 I/O 子系统中可能存在的问题。

    数据库管理员可以插入或更新记录。 例如,当数据库管理员知道特定可疑页面实际上完好无损,但想要保留一段时间的记录时,更新行可能会很有用。

安全

权限

有权访问 msdb 的任何人都可以读取 suspect_pages 表中的数据。 对suspect_pages表具有 UPDATE 权限的任何人都可以更新其记录。 db_owner固定数据库角色在msdb数据库上,或sysadmin固定服务器角色的成员可以插入、更新和删除记录。

使用 SQL Server Management Studio

管理“suspect_pages”表

  1. 对象资源管理器中,连接到 SQL Server 数据库引擎的实例,展开该实例,然后展开 “数据库”。

  2. 依次展开 系统数据库,展开 msdb,展开 ,然后展开 系统表

  3. 展开 dbo.suspect_pages ,然后右键单击“ 编辑前 200 行”。

  4. 在查询窗口中,编辑、更新或删除所需的行。

使用 Transact-SQL

管理suspect_pages表

  1. 连接到数据库引擎。

  2. 在标准栏中,单击“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击 “执行”。 此示例从 suspect_pages 表中删除一些行。

-- Delete restored, repaired, or deallocated pages.  
DELETE FROM msdb..suspect_pages  
   WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);  
GO  
  

本示例返回表中的坏页 suspect_pages

-- Select nonspecific 824, bad checksum, and torn page errors.  
SELECT * FROM msdb..suspect_pages  
   WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);  
GO  
  

另请参阅

删除数据库 (Transact-SQL)
RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
DBCC (Transact-SQL)
还原页(SQL Server)
可疑页面(Transact-SQL)
MSSQLSERVER_823
MSSQLSERVER_824