用户数据库质疑状态处理(可能由于机房断电,数据库服务器异常重启后,导致个别数据库状态质疑):
--修复数据库(置疑)
-- 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的数据和日志文件即可恢复。