• sqlserver 调优(三)


    用户数据库质疑状态处理(可能由于机房断电,数据库服务器异常重启后,导致个别数据库状态质疑):

    --修复数据库(置疑)
    -- xxxDB 为需要修复的数据库的名称
    ALTER DATABASE xxxDB SET EMERGENCY
    ALTER DATABASE xxxDB SET SINGLE_USER
    DBCC CheckDB (xxxDB, REPAIR_ALLOW_DATA_LOSS)
    ALTER DATABASE xxxDB SET MULTI_USER

     当初修复完数据库出现库中个别表出现问题时:

    use 需要修复的数据库实体的名称    
    declare @dbname varchar(255)    
    set @dbname='需要修复的数据库的名称'    
    exec sp_dboption @dbname,'single user','true'    
    dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)    
    dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)    
    ------把’ 需要修复的数据表的名称’更改为执行DBCC CHECKDB时报错的数据表的名称    
    exec sp_dboption @dbname,'single user','false'  

     如果质疑状态的是系统数据库msdb:

    方法一、 风险: 丢失原msdb上所有的数据。

    A服务器为被“置疑”的服务器;B服务器上装有和A服务器相同版本的数据库软件。
    
    步骤1、停止B服务器上的SQL SERVER 服务,拷贝出“msdbdata.mdf”和“msdblog.ldf”文件。
    
    步骤2、停止A服务器上的SQL SERVER 服务,将从B服务器上拷贝出的“msdbdata.mdf”和“msdblog.ldf”文件覆盖掉A服务器上的这两个文件。 3、重新启动A服务器上的SQL SERVER服务。

     方法二 、 风险:丢失原msdb上部分的数据

    若是损坏的是日志文件,则可以通过以下步骤恢复(损坏的是数据文件同理恢复Rebuild Log  需要更改):
    1)停止sqlsever实例,将msdb的数据文件和日志文件拷贝到其他地方 ,删除原来的数据和日志文件
    2)在新服务器上的新实例上新建一个数据库msdbold(用户数据库 ,并且数据文件指定为MSDBData.mdf,日志文件指定为MSDBLog.ldf)
    3)关闭新的数据库实例,删除msdbold的数据和日志文件,将1)步骤拷贝的数据文件MSDBData.mdf放到msdbold的数据文件路径下
    4)开启新的数据库实例则发现msdbold处于质疑状态,之后通过以下步骤恢复msdbold
    use master
    go
    
    alter database msdbold set emergency
    alter database msdbold set single_user with rollback immediate
    
    alter database msdbold Rebuild Log on (name=msdbold_log,filename='E:databaseMSDBLog.ldf')
    go
    
    alter database msdbold set multi_user with rollback immediate
    
    5)之后将新的msdbold的数据文件和日志文件替换掉有问题的数据库实例下的msdb的数据和日志文件即可恢复。
  • 相关阅读:
    Java中的多线程你只要看这一篇就够了
    模板CodeTemplate
    mybatis_mysql
    Kettle 使用Json输入
    图解ByteBuffer
    双队列缓存
    log4j.properties配置详解与实例
    Kettle 使用Json输入
    JSON响应端模拟测试
    使用Kettle导出excel
  • 原文地址:https://www.cnblogs.com/lx823706/p/6897409.html
Copyright © 2020-2023  润新知