• 检查修复数据库常用方法


    摘自: http://wenku.baidu.com/link?url=QYrNtEu3F3-3fhW45imoNIKkArcMAfqfUc6PNhvpv0UCHu4ChjF-OEiveN2xqPcwnGF6-1UiQY4Tyo4km5qAP_jRi-PJhub6OidIWgFZNl_

    A、检查数据库常用方法:
    隔一定时间或计算机经常死机、突然掉电、软件经常连接不上数据库时,需要进行检查数据库的完整性和正确性。
    一、进入sqlserver“查询分析器”,选中“消费数据库”后输入检测数据库命令:
    DBCC CHECKDB ('消费数据库名称', NOINDEX)
    二、Sqlserver开始检查“消费数据库”的完整性和正确性。
    检查结果:
        1、如果为“0个分配性错误,0个一致性错误”,消费数据库正常。退出。
        2、否则“消费数据库”需要进行恢复。
           步骤:
               1、把“查询分析器”的当前数据库改为master数据库。
               2、在查询分析器里面依次执行下面命令:
                  A、SP_DBOPTION '消费数据库名称','SINGLE USER',TRUE
                  B、DBCC CHECKDB('消费数据库名称',REPAIR_ALLOW_DATA_LOSS)
                  C、SP_DBOPTION '消费数据库名称','SINGLE USER',FALSe
        3、最后重复步骤一再次检查数据库正确性

    B、LOG文件损坏处理方法:
      1、停止服务,copy mdf与ldf文件到别处(不要做sp_detach_db分离数据库)
      2、建立一个新数据库
      3、将你复制出去的 mdf文件改名字,替换刚刚新建的数据库的mdf文件(此时你再刷新数据库仍为置疑状态,可以不管)
      4、进入查询分析器,运行以下语句
          USE MASTER
          GO
          
          SP_CONFIGURE 'ALLOW UPDATES',1
          GO

          RECONFIGURE WITH OVERRIDE
          GO
       
          UPDATE SYSDATABASES SET STATUS=-32768 WHERE NAME='数据库名称'

      5、重建LOG

          DBCC REBUILD_LOG('数据库名称','C:PROGRAM FILESMICROSOFT SQL SERVERMSSQLDATA数据库名称_LOG.LDF')

          如果提示“文件已存在”的话,请在相应目录下把原来的LOG文件删除
      
      6、DBCC检查 DBCC CHECKDB('数据库名称')
      7、设置数据库为正常状态
          UPDATE SYSDATABASES SET STATUS =28 WHERE NAME='数据库名称'
          GO

      8、不允许对系统目录直接修改
          SP_CONFIGURE 'ALLOW UPDATES',0
          GO
       
          RECONFIGURE WITH OVERRIDE
          GO

      9、以上步骤执行完毕后应该就可以进入系统了,但有可能数据库还是有错误,这时可以使用A中的方法对数据库进行修复
      10、如在执行“SP_DBOPTION '消费数据库名称','SINGLE USER',TRUE”报错“服务器: 消息 5070,级别 16,状态 2,行 1
        如果其他用户正使用数据库 'elong',则数据库状态不能更改 服务器: 消息 5069,级别 16,状态 1,行 1 ALTER DATABASE 语句失败。 sp_dboption 命令失败。”

        就进行以下步骤: 进入查询分析器 执行以下语句(注意数据库名称)

          use master
          go
         
          --kill所有会话
          Declare @tblConnectedUsers Table (SPID int)
          Declare @vcSQLText varchar(200),@iSPID int

          Insert into @tblConnectedUsers
          Select p.spid
              from master.dbo.sysprocesses p (nolock)
              join master..sysdatabases d (nolock) on p.dbid = d.dbid
              Where d.[name] = '数据库名称'
            
          While 1 = 1
          Begin
              Select top 1 @iSPID = SPID
                  From @tblConnectedUsers
                  Where SPID > IsNull(@iSPID, 0)
                  order by SPID asc

              If @@RowCount = 0
                Break

              Set @vcSQLText = 'Kill ' + Convert(varchar(10), @iSPID)
              
              Exec(@vcSQLText)
          End

    11、再重新操作A中的步骤修复数据库

  • 相关阅读:
    标准C++中的string类的用法总结
    JSON用法简介
    拷贝构造函数的调用时机
    define中的:#,##,#@
    一个二维码支持支付宝和微信支付(下)
    一个二维码支持支付宝和微信支付(上)
    【JAVA笔记】JAVA后端实现统一扫码支付:微信篇
    java生成二维码,读取(解析)二维码图片
    Java程序员的日常—— IOUtils总结
    Java: Map里面的键和值可以为空吗?
  • 原文地址:https://www.cnblogs.com/wuyifu/p/4766568.html
Copyright © 2020-2023  润新知