当数据库出现这种情况的时候,说明数据库已经出现损坏,需要对数据库进行修复处理;

1、打开数据库管理器SQL server Management Studio,将当前数据库实例服务停止;

然后找到需要修复的数据库的存放目录,并将.mdf和.ldf文件拷贝到其他盘进行备份(很重要)。如果不备份,后续的操作将会导致数据丢失无法修复;

2、删除原来的数据库,并新建一个同名数据库,并且文件路径同样与之前路径保持一致;

3、停止SQL 服务,删除新建数据库.ldf文件,将要之前备份的数据库.mdf文件覆盖刚新建的.mdf文件,然后重启服务;

这时数据库DATA目录下只有一个.mdf文件,启动SQL server Management Studio

4、新建查询窗口,顺序执行以下语句;

下面执行语句中出现的“dbname” 全部替换为待修复的数据库名称。

执行语句:

use master

go

alter database dbname set emergency

go

--置数据库为单用户模式

alter database dbname set single_user with rollback immediate

go

--重建数据库日志文件,filename后面表示新建的日志文件路径,需要替换为当前数据库的日志文件路径;

alter database dbname Rebuild Log on (name=log_name,filename='d:\DataBase\log_name.ldf')

go

--最后设置数据库为多用户模式。

alter database dbname set multi_user

go

-------------------以上为新建日志文件的操作------------

5、通过以上方法修复数据库后,可以dbcc checkdb一下数据库,如果发现页级错误,可以通过以下命令修复。

以下修复命令要在单用户的情况下使用:

--置数据库为单用户模式

exec sp_dboption dbname, single, true //SQL200-SQL2005

alter database dbname set Single_user //SQL2005-SQL2016

go

--如果返回结果出现了红色的提示文字,说明数据库中存在错误,需要修复

DBCC CHECKDB (dbname)

go

--快速修复  

DBCC CHECKDB (dbname, REPAIR_FAST)  

go   

--重建索引并修复

DBCC CHECKDB (dbname, REPAIR_REBUILD)

go

--再次数据库检查,如果返回结果中没有了红色的提示文字,说明修复成功;

DBCC CHECKDB (dbname)

Go

--否则意味着还需要更高级别的修复:如果必要允许丢失数据修复

DBCC CHECKDB (dbname, REPAIR_ALLOW_DATA_LOSS)

--之后再次检查数据库。

DBCC CHECKDB (dbname)

Go

--最后--退出前请一定要执行以下语句再设置数据库为多用户模式

alter database dbname set multi_user

go

---SQL执行操作实例:

use master
go


alter database GasMeterMDKW set emergency
go


----置数据库为单用户模式

alter database GasMeterMDKW set single_user with rollback immediate

--方法1:exec sp_dboption dbname, single, true //适用于SQL200-SQL2005
--方法2:alter database dbname set Single_user //适用于SQL2005-SQL2016
go


----重建数据库日志文件,filename后面表示新建的日志文件路径,需要替换

alter database GasMeterMDKW Rebuild Log on (name=GasMeterMDKW,filename='d:\DataBase\GasMeterMDKW.ldf')

go


----置数据库为多用户模式
alter database GasMeterMDKW set multi_user


----重启SQL服务
Use master
go


----置为单用户

alter database GasMeterMDKW set Single_user  

----开始checkdb修复
dbcc checkdb(GasMeterMDKW,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb(GasMeterMDKW,REPAIR_REBUILD)


----改回多用户模式
alter database dbname set multi_user

go

更多推荐

MS SQL 数据库出现损坏(可疑)的修复方法