新建一同名数据库(文件名,文件组都和原来的一样),然后停止数据库服务,用原来文件替换新建的数据库文件,启动数据库,该数据库被设未suspect然后把数据库改成紧急模式:
sp_configure 'allow', 1
reconfigure with override
update sysdatabases set status = 32768 where name = '数据库名'把LDF文件改名,再执行
DBCC REBUILD_LOG ('数据库名', 'E:\fdzz\database\fdzz1204_Log.LDF' )恢复数据库紧急模式
update sysdatabases set status = 0 where name = '数据库名'
执行
restore database 数据库名 WITH RECOVERY
sp_configure 'allow', 0
reconfigure with override然后用DBCC CHECKDB ('数据库名')看看有没有错误如果上面还是不行,试试吧数据库设为紧急模式,应该可以看到数据了,在把数据导出到一个新的数据库

解决方案 »

  1.   

    这个问题比较复杂,引起的原因页很多。另外,你备份后的数据如果是在置疑之后备份的恢复之后也是置疑的。  
    数据库置疑之后,你可以查看系统数据库maseter中的sysdatabase中的status列,如果该列值是256表示置疑  
    你可以手工恢复  
    必须以sa登陆  
    USE  master  
    GO  
    sp_configure  'allow  updates',  1  
    GO  
    RECONFIGURE  WITH  OVERRIDE  
    GO  
    sp_resetstatus    
    go  
     
    update  sysdatabase    
    set  status  =  status  -256  
    where  dbname="your  database  name  here"  
    and  status&256=  256(或者直接写256)  
    go  
    sp_configure  'allow  updates',  1  
    GO  
    RECONFIGURE  WITH  OVERRIDE  
    GO  
    sp_resetstatus    
    go  
    这样一般能恢复
      

  2.   


    右键置疑状态的数据库-->所有任务-->脱机
    右键脱机状态的数据库-->所有任务-->联机
      

  3.   

    重置置疑状态
    如果 SQL Server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么
    Microsoft? SQL Server? 2000 会返回错误 1105 并且将 sysdatabases 中的 status
    列设为置疑。按下面的步骤解决这个问题:  1.. 执行 sp_resetstatus。
      2.. 用 ALTER DATABASE 向数据库添加一个数据文件或日志文件。
      3.. 停止并重新启动 SQL Server。
      用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢
    复。  4.. 释放磁盘空间并且重新运行恢复操作。
    sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。注意  只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用
    sp_resetstatus。否则,可能会损坏数据库。
    由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启
    用更新,使用下面的过程:USE master
    GO
    sp_configure 'allow updates', 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    过程创建后,立即禁用系统表更新:sp_configure 'allow updates', 0
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。语法为:sp_resetstatus database_name下面的例子将关闭 PRODUCTION 数据库的置疑标志。sp_resetstatus PRODUCTION
    下面是结果集:Database 'PRODUCTION' status reset!
    WARNING: You must reboot SQL Server prior to accessing this database!
    sp_resetstatus 存储过程代码
    下面是 sp_resetstatus 存储过程的代码:IF EXISTS ( SELECT * from sysobjects where name = 'sp_resetstatus' )
       DROP PROCEDURE sp_resetstatus
    GOCREATE PROC sp_resetstatus @dbname varchar(30) AS
    DECLARE @msg varchar(80)
    IF @@trancount > 0
          BEGIN
             PRINT 'Can''t run sp_resetstatus from within a transaction.'
             RETURN (1)
          END
    IF suser_id() != 1
          BEGIN
             SELECT @msg =  'You must be the System Administrator (SA)'
             SELECT @msg = @msg + ' to execute this procedure.'
             RETURN (1)
          END
    IF (SELECT COUNT(*) FROM master..sysdatabases
             WHERE name = @dbname) != 1
          BEGIN
             SELECT @msg = 'Database ' + @dbname + ' does not exist!'
             PRINT @msg
             RETURN (1)
          END
    IF (SELECT COUNT(*) FROM master..sysdatabases
             WHERE name = @dbname AND status & 256 = 256) != 1
          BEGIN
             PRINT 'sp_resetstatus can only be run on suspect databases.'
             RETURN (1)
          END
    BEGIN TRAN
          UPDATE master..sysdatabases SET status = status ^ 256
             WHERE name = @dbname
          IF @@error != 0 OR @@rowcount != 1
             ROLLBACK TRAN
          ELSE
             BEGIN
                COMMIT TRAN
                SELECT @msg = 'Database ' + @dbname + ' status reset!'
                PRINT @msg
                PRINT ''
                PRINT 'WARNING: You must reboot SQL Server prior to  '
                PRINT '         accessing this database!'
                PRINT ''
             END
    GO