数据库置疑的处理办法
在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的所在目录的权限.  

解决方案 »

  1.   

    如果數據有價值,我有償修復QQ:315054403 MSN: [email protected]
      

  2.   

    首先感谢大家的参与!特别是1楼dawugui的详细解答!现在还没有按照此法尝试!尝试后我会尽快反馈给大家的!
    最后我还想提个问题:我的数据库一共有4个文件,一个是.mdf数据库文件,一个是.ndf文件,还有两个.log文件,如果删掉数据库,建立同名数据库时是否还要另外再建立.ndf文件和.log文件,然后再把之前的4个文件覆盖回来,还是只需建立一个.mdf和.log共两个文件就够了?
      

  3.   

    我以前也遇到过数据库置疑的问题,就是用老乌龟所说的方法解决的,但是数据库恢复后有个别表打不开,我就将主要表里数据导出,再用脚本建个新库将数据导进去。楼主按老乌龟的方法应该能解决问题,至于是否建.ndf,感觉应该不用建吧,不过你把数据库先拷出去,试试就知道了。
      

  4.   

    首先感谢tjw8310的关注!!
    我按照1楼laowugui的方法:早上DBCC CHECKDB 处理后报了一堆错误,不过里面的表已经能够看到,主要的表也已经能够打开。
    当时没能恢复为多用户模式,下午再时重建的数据库再次置疑!明天还得再次重建,希望能够恢复为多用户模式,实在不行只能
    把所有表导出去重新用脚本重建数据库,再把表导回来了!