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的数据和日志文件即可恢复。
原文地址:https://www.cnblogs.com/lx823706/p/6897409.html