"Msg 8992"错误消息,并在 SQL Server 系统目录的元数据不一致

文章翻译 文章翻译
文章编号: 2787112 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

您遇到 Microsoft SQL Server 中的以下问题之一。

问题 1

假设当您手动更新 SQL Server 数据库中的系统表在系统元数据中创建不一致的情况。然后,您试着运行DBCC CHECKDB命令,以确定在系统表中的元数据不一致。在此情况下,将返回下面的错误消息:
8992 消息,级别 16 状态 1,第 1 行
请检查目录 Msg 3853,状态 1: 特性 (referenced_object_id =对象 ID1>,key_index_id =索引 ID>) 的行 (object_id =对象 ID>) 在 sys.foreign_keys 中没有相匹配的行 (object_id =对象 ID1>,index_id =索引 ID>) 在 sys.indexes 中。

问题 2

在 SQL server 中的系统表更新时,您收到类似于以下内容的警告消息:
警告: 系统表 ID表 ID1> 已直接在数据库 ID 更新数据库 ID1> 和缓存一致性可能不保留。应重新启动 SQL Server。
在此情况下,如果运行DBCC CHECKDBDBCC CHECKCATALOG命令,将返回警告消息的日期和时间所做的最后一次更改系统目录以及。此外,还在 SQL Server 日志中记录以下警告消息:
警告: 系统编录的编录已更新直接在数据库 ID数据库 ID1>,最近在日志时间>.
注意此信息存储在数据库标头中,数据库的生存期内仍然存在。

原因

发生此问题是因为 SQL Server 不支持手动更新系统表。应仅由 SQL Server 数据库引擎更新系统表。

注意通过使用系统目录视图,可以在系统表中查看数据。

解决方案

若要解决此问题,请使用下列方法之一。

方法 1

如果您有数据库的干净备份,请从备份还原数据库。

注意备份元数据中不包含不一致的情况,此方法才可用。

方法 2

如果不能从备份还原数据库,将数据和对象导出到新的数据库。然后,将手动更新数据库的内容传输到新数据库中。注意DBCC CHECKDB命令中使用的修复选项,则不能修复系统目录中的不一致。因此,该命令不能修复被损坏的元数据,因为该命令不提供任何建议的修复级别。

更多信息

有关检测到的对系统目录进行修改系统中心审查程序规则的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2688307 当更新 SQL Server 数据库系统表中的记录事件 ID 17659 和事件 ID 3859
下表列出了错误,它们指明系统目录中的不一致。通常情况下,以下错误会生成"8992"错误代码。
收起该表格展开该表格
错误消息文本
3851在系统表 sys.%ls%ls 中找到无效的行 (%1!
3852Sys.%ls%ls 中的一行 (%1!) 在 sys.%ls%ls 中没有相匹配的行 (%1!)。
3853Sys.%ls%ls 中的一行 (%1!) 的属性 (%1!) 在 sys.%ls%ls 中没有相匹配的行 (%1!)。
3854Sys.%ls%ls 中的一行 (%1!) 的属性 (%1!) 中是无效的 sys.%ls%ls 具有相匹配的行 (%1!)。
3855Sys.%ls%ls 中的一行 (%1!) 不存在属性 (%1!)。
3856属性 (%1!) 存在,但应该不是 sys.%ls%ls 中的一行 (%1!)。
3857属性 (%1!) 是必需的但缺少对于 sys.%ls%ls 中的一行 (%1!)。
3858Sys.%ls%ls 中的一行 (%1!) 的属性 (%1!) 具有无效值。
3859警告: 系统编录的编录已更新直接在数据库 ID %d,最近在 %1 中。
以下是您在遇到这些问题时,可能收到的错误消息的示例:
服务器: 2513年消息,级别状态 1 16 行 1
表错误: 对象 ID对象 ID1> (对象对象 ID1> ') SYSCOLUMNS 和系统对象之间不匹配。

消息 3853,级别 16 状态 1,第 2 行
属性 (object_id =对象 ID>) 的行 (object_id =对象 ID1>,index_id =索引 ID>) 在 sys.indexes 中没有相匹配的行 (object_id =对象 ID>) 在 sys.objects 中。

消息 3855,级别 16 状态 1,第 2 行
属性 (data_space_id = 1) 而行不存在 (object_id =对象 ID1>,index_id =索引 ID>) 在 sys.indexes 中。

消息 3852,16,状态 1,第 1 行级别
行 (object_id =对象 ID1>,index_id = 1) 在 sys.indexes (类型 = U) 不具有匹配的行 (类 = 0、 objid =对象 ID1>,indexid =索引 ID1>,rowsetnum = 1) 在 sys.sysrowsetrefs 中。

消息 3852,16,状态 1,第 1 行级别
行 (object_id =对象 ID1>,index_id = 1) 在 sys.indexes (类型 = U) 不具有匹配的行 (类 = 0、 objid =对象 ID1>,indexid =索引 ID1>,rowsetnum = 1) 在 sys.sysrowsetrefs 中。

消息 3853,16,状态 1,第 1 行级别
属性 (default_object_id =对象 ID1>) 的行 (object_id =对象 ID1>,column_id =列 ID>) 在 sys.columns 中没有相匹配的行 (object_id =对象 ID>) 在 sys.objects 中。

8992 消息,级别 16 状态 1,第 1 行
请检查目录 Msg 3853,状态 1: 特性 (object_id =对象 ID>) 的行 (object_id =对象 ID1>,column_id =列 ID>) 在 sys.columns 中没有相匹配的行 (object_id =对象 ID>) 在 sys.objects 中。

DBCC 执行完毕。如果 DBCC 输出了错误消息,请与您的系统管理员联系。
此外,您可能会收到"Msg 211"错误消息,如下所示,如果通过运行CHECKDB命令检查数据库的一致性。
消息 211,23,状态 230,第 1 行级别
架构可能已损坏。运行 DBCC CHECKCATALOG。

消息 0,20,状态 0,0 行级别
在当前的命令上发生了严重错误。结果,如果有的话) 应丢弃
此错误消息也指示系统目录包含元数据不一致。

注意已通过运行CHECKDB命令升级从 SQL Server 2000年数据库一致性检查时,该命令可能返回"8992"错误代码和报告不一致在系统目录中。出现此现象是因为 SQL Server 2000年中的DBCC CHECKDB命令不包括DBCC CHECKCATALOG命令的功能。因此,不会检测这些问题到 SQL Server 2000年中,除非已运行DBCC CHECKCATALOG命令。

有关如何使用DBCC CHECKDB命令的详细信息,请转到下面的 Microsoft 网站:
有关 DBCC CHECKDB 命令的一般信息

参考

有关手动更新 SQL Server 系统表时可能会出现的问题的详细信息,请单击文章编号,以查看 Microsoft 知识库中相应的文章:

2688307 当更新 SQL Server 数据库系统表中的记录事件 ID 17659 和事件 ID 3859


属性

文章编号: 2787112 - 最后修改: 2013年2月4日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Standard
关键字:?
kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB2787112 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 2787112
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com