利用MDF文件附加数据库时,执行如下语句:
alter database PACAP_CCER  set emergency 
use master 
declare @databasename varchar(255) 
set @databasename='PACAP_CCER'         
exec sp_dboption @databasename, N'single', N'true' 
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 
dbcc checkdb(@databasename,REPAIR_REBUILD) 
exec sp_dboption @databasename, N'single', N'false'有如下错误提示:
消息 5173,级别 16,状态 1,第 6 行
一个或多个文件与数据库的主文件不匹配。如果是尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则文件可能已损坏,应该从备份进行还原。
日志文件 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PACAP_CCER_log.ldf' 与主文件不匹配。该文件可能来自另一数据库,或者可能以前重新生成了日志。
PACAP_CCER的 DBCC 结果。
CHECKDB 在数据库 'PACAP_CCER' 中发现 0 个分配错误和 0 个一致性错误。
消息 7901,级别 16,状态 1,第 7 行
未处理修复语句。当数据库处于紧急模式下时,不支持此级别的修复。
消息 824,级别 24,状态 2,第 6 行
SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂(签名应该为: 0xaaaaaaaa,但实际为: 0x55aaaaaa)。在文件 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PACAP_CCER.mdf' 中、偏移量为 0x00000000002000 的位置对数据库 ID 8 中的页 (1:1) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
消息 7909,级别 20,状态 1,第 6 行
紧急模式修复失败。您必须从备份中还原。

解决方案 »

  1.   

    1.这个错误可能预示着,MDF文件之前所在环境存在硬件问题。
    2.因为损坏的是PFS页(数据文件的第1页是PFS页),就注定了这个错误通过DBCC CHECKDB是无法修复的。
      并且数据在紧急模式下数据也很可能是无法select出来,也就是说你连将数据导出的机会都没有。
    3.一般来说紧急模式下无法修复的错误,基本上就可以宣告通过正常途径修复的努力都将无效。如果
      数据很重要,你要可以联系MS或是专业的数据修复机构,也许可以挽回一些损失。
    4.如果PFS页的数据是正确的,只是页头中TORN PAGE的信息不对,也许可以通过直接修改mdf物理文件的方式
      来解决。可以用UltraEdit打开MDF文件,根据错误信息提示的偏移量找到相应的页的位置,然后在页中再
      找到相应的偏移量(torn page的偏移量),修改数据。
      

  2.   

    补充一点,DBCC的错误信息只输出一个错误(error 824),并不表示你的数据库就这一个错误。
    而事实是这个错误让DBCC CHECKDB根本无法继续的检查下去,在检查的最初阶段就遇到了严重
    错误,导致检查终止了。