• SQL Server置疑数据库解决方法


    方法一:

      现象:数据库Log日志太大了,shrink不掉。于是想把数据库文件卸下来,删除log,再附加上。附加失败。

      提示错误:

      服务器: 消息 1813,级别 16,状态 2,行 1

      未能打开新数据库 'metadb'。CREATE DATABASE 将终止。

      设备激活错误。物理文件名 'd:\metadb.LDF' 可能有误。

      环境:MSSQL SERVER 2000 企业版

      解决过程:

      1.建一个新库newdb

      2.停掉数据库。删除新库的log文件,讲metadb.mdf覆盖newdb.mdf。

      3.启动数据库服务器。数据库newdb的状态为“置疑”。

      4. 允许对系统目录直接修改

    use master
    go
    sp_configure 'allow updates',1
    go
    reconfigure with override
    go
    update sysdatabases set status=-32768 where dbid=DB_ID('newdb')

      5.重建log


    dbcc rebuild_log('newdb','C:\Program Files\Microsoft SQL Server\MSSQL\Data\newdb_log.ldf')

      6.dbcc检查


    dbcc checkdb('newdb')

      7.设置数据库为正常状态


    sp_dboption 'newdb','dbo use only','false'

      8 不允许对系统目录直接修改


    sp_configure 'allow updates',0
    go
    reconfigure with override
    go

      方法二:

      解决办法:   
        
      这是最简单的办法是有数据库的全备份,然后恢复即可。

      步骤:   
        
      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

    原文出处:http://hi.baidu.com/genersoft/blog/item/d5fd818b1b25367b9f2fb490.html
  • 相关阅读:
    电商用户留存率比例
    转载——使用Python拆分数据量大的CSV文件(亲测有效)
    SQL中group by的注意事项
    MySQL中DELETE子句与TRUNCATE TABLE语句的区别
    TimeStamp( )函数, TimeStampAdd( )函数 , TimeStampDiff( )函数
    MySQL 练习题目 二刷
    math对象,BOM模型中常用对象
    js函数和date内置对象
    while循环和for循环
    不等于运算符、逻辑表达式、if语句及switch语句
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/1996254.html
Copyright © 2020-2023  润新知