如何在SQL Server中导致一致性错误?

时间:2013-05-30 13:59:17

标签: sql-server

我在客户的dbcc checkdb输出中遇到一个表(更多非常相似的行)的错误:

  

Msg 8964,Level 16,State 1,Line 1
  表错误:对象ID 212503619,索引ID 1,分区ID 72057594046251008,分配单元ID   72057594048675840(类型LOB数据)。页面(1:705),插槽0,文本ID 328867287793664的行外数据节点未被引用。

     

CHECKDB在表'X'中找到0个分配错误和49个一致性错误(对象ID 2126630619)。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

  1. 硬件问题
  2. 操作系统级文件系统问题(过滤器驱动程序,...)
  3. 未记录的命令,如DBCC WRITEPAGE
  4. 严重的错误
  5. 您可以单步执行升级脚本吗?如果没有,请尝试使用SQL事件探查器进行跟踪。找到首先出现腐败的陈述。

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

    DBCC CHECKDB([AdventureWorks2012]) WITH NO_INFOMSGS, ALL_ERRORMSGS