2

dbcc checkdb的客户在一张表的输出中出现以下错误(更多非常相似的行):

消息 8964,级别 16,状态 1,行 1
表错误:对象 ID 212503619,索引 ID 1,分区 ID 72057594046251008,分配单元 ID 72057594048675840(类型 LOB 数据)。未引用页面 (1:705)、槽 0、文本 ID 328867287793664 处的行外数据节点。

CHECKDB 在表“X”(对象 ID 2126630619)中发现 0 个分配错误和 49 个一致性错误。

此错误是在运行我们的软件升级时创建的(如果他从备份中恢复数据库并再次运行升级,同样的问题会再次出现)。

我的问题是 - 我怎么可能从我的应用程序中创建这种错误?我一直认为这种错误一定是由某些环境(HDD)问题引起的,但我在另一个环境的同一张桌子上看到了同样的问题。我尝试了与他相同的步骤,但没有成功。

谢谢!

4

1 回答 1

2

你是对的,这可能是 SQL Server 中的一个严重错误。使用记录和支持的 T-SQL 不可能导致损坏。要引起腐败,你需要

  1. 硬件问题
  2. 操作系统级别的文件系统问题(过滤器驱动程序,...)
  3. 未记录的命令,例如 DBCC WRITEPAGE
  4. 一个严重的错误

您可以单步执行升级脚本吗?如果没有,请尝试使用 SQL Profiler 对其进行跟踪。找出最先出现腐败的语句。

这是一个更简单、噪音更小的命令:

DBCC CHECKDB([AdventureWorks2012]) WITH NO_INFOMSGS, ALL_ERRORMSGS
于 2013-05-30T14:39:20.677 回答