数据库因为断电,出现置疑,无法分离和附件。通过重建日志文件的方式可以恢复数据库,用DBCC CHECKDB检查,出现17个(或者多达几百个)一致性错误。
求如何解决。我是菜鸟,希望有详细的步骤。
试过REPAIR_ALLOW_DATA_LOSS不成功。
通过将数据库导出到新建的数据库,出现错误。
能给一些相关的参考资料看看么?谢谢~~~

解决方案 »

  1.   

    数据库置疑的处理办法 
    在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",我们先来分析一下SQLSERVER数据库"置疑"的原因: 
    1.错误的删除日志; 
    2.硬件(HD)损坏,造成日志和数据文件写错误; 
    3.硬盘的空间不够,比如日志文件过大; 
    解决办法: 这是最简单的办法是有数据库的全备份,然后恢复即可. 
    步骤: 1. 删除原始的数据库: 
    USE MASTER 
    GO 
    DROP DATABASE DB_SUEPECT 
    2.建立同名的数据库: 
    USE master 
    GO 
    CREATE DATABASE DB_SUSPECT 
    ON 
    ( NAME = DBNAME_DAT, 
    FILENAME = 'C:', 
    SIZE = 10, 
    FILEGROWTH = 5 ) 
    LOG ON 
    ( NAME = 'DBNAME_LOG', 
    FILENAME = 'g:', 
    SIZE = 5MB, 
    FILEGROWTH = 5MB ) 
    GO 
    3.恢复数据库: 
    RESTORE DATABASE DB_SUSPECT 
    FROM DBNAME_BACKUP.DAT 
    4.数据库完整性检测: 
    DBCC CHECKDB('DB_SUSPECT') 5.重新启动MSSQLSERVER服务. 如果没有全备份,那就要用一些特殊的方法: 1.设置数据库为紧急模式 
    Use Master 
    GO 
    sp_configure 'allow updates', 1 
    reconfigure with override 
    GO 
    UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT' 
    GO 2.停掉SQL Server服务: 
    NET STOP MSSQLSERVER 3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走: 4.启动SQL Server服务: 
    NET START MSSQLSERVER 5.重新建立一个同名的数据库DB_SUSPECT; USE master 
    GO 
    CREATE DATABASE DB_SUSPECT 
    ON 
    ( NAME = DBNAME_DAT, 
    FILENAME = 'C:', 
    SIZE = 10, 
    FILEGROWTH = 5 ) 
    LOG ON 
    ( NAME = 'DBNAME_LOG', 
    FILENAME = 'g:', 
    SIZE = 5MB, 
    FILEGROWTH = 5MB ) 
    GO 
    6.设置数据库运行在单用户的模式: 
    USE MASTER 
    GO 
    ALTER DATABASE DB_SUSPECT SET SINGLE_USER 
    GO 7.停掉SQL服务: 
    NET STOP MSSQLSERVER 8.把原来的数据文件再覆盖回来: 
    9.启动SQL Server服务: 
    NET START MSSQLSERVER 10.重新设置SQLSERVER的状态: 
    USE MASTER 
    GO 
    EXEC sp_resetstatus "DB_SUSPECT" 11.数据库完整性检测: 
    DBCC CHECKDB('DB_SUSPECT') 12.恢复数据库为多用户模式: 
    USE MASTER 
    GO 
    ALTER DATABASE DB_SUSPECT SET MULTI_USER 
    GO 13.恢复SQLSERVER原始的配置: 
    USE MATER GO UPDATE sysdatabases SET status = 4194320 where name = 'DB_SUSPECT' 
    GO 14.配置SQLSERVER不允许更新系统表: 
    USE MASTER 
    GO 
    sp_configure 'allow updates', 0 
    reconfigure with override 
    GO 15.重新启动MSSQLSERVER服务: 最好重新启动操作系统 16.备份数据库: 可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT 
    补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF的所在目录的权限. 
      

  2.   

    恩,问题是现在客户的数据库已经出错。而备份太久不能用了!
    我因为恢复了数据,在SQL企业管理器已经可以看到表数据,但是DBCC CHECKDB出现17个一致性错误。
    我是想知道一致性错误应该如何修复啊~~~
    请求大虾帮忙!!!~~谢谢~~~
      

  3.   

    USE MASTER
    GO
    sp_dboption ‘databaseName’, ’single user’, ‘true’
    Go
    DBCC CHECKDB(’databaseName’, REPAIR_REBUILD)
    Go
    USE databaseName
    go
    exec sp_msforeachtable ‘DBCC CHECKTABLE(''’?''’,REPAIR_REBUILD)’
    go
    sp_dboption ‘databaseName’, ’single user’, ‘false’
    Go 
    如果还不行,可以采用允许丢失数据的方式修复,如下:
    USE MASTER
    GO
    sp_dboption ‘databaseName’, ’single user’, ‘true’
    Go
    DBCC CHECKDB(’databaseName’, REPAIR_ALLOW_DATA_LOSS)
    Go
    USE databaseName
    go
    exec sp_msforeachtable ‘DBCC CHECKTABLE(''’?''’,REPAIR_REBUILD)’
    go
    sp_dboption ‘databaseName’, ’single user’, ‘false’
    Go复制如下命令,写入记事本,保存为:运行CHKDSK.bat 双击运行,完了重启电脑.一般能解决的. 
    @ECHO OFF 
    for %%1 in (c: d: e: f: G: h: i: j: k: l: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (if exist %%1 ECHO Y|chkdsk %%1 /R /x) 
    @pause 
      

  4.   


    你都已经重建日志了,怎么还原............你出事之后就应该做个log备份,然后还原
      

  5.   

    数据库是重建了,但是原始的mdf和ldf都有备份。
    关于数据库修复的技术,在此讨教一下。谢谢各位大虾的指点。小弟不胜感激!~!
      

  6.   

    前提还需要保证你之前的备份之后没有截断日志等操作--备份尾日志
    backup log db to disk='' with format,no_truncate之后还原全备,再还原这个日志备份,指定stop at参数