无法打开数据库‘XXXX’。恢复操作已将该数据库标记为SUSPECT
当你用navciat连接sql server 数据库的时候,发现某个库打不开的时候。爆出了这个‘无法打开数据库‘XXXX’。恢复操作已将该数据库标记为SUSPECT’错误,那么你读这篇文章就对了,此时的你可以打开mssm来连接下数据库,会发现这个数据库后面被标上了“可疑两个字”
这边小编就不附图了哈,毕竟是数据库不要随便贴图,但是报错大家如果遇见了,也就自然见到了,报错的内容也就是文章的标题内容
1. 原因
一般来说,小概率会遇见这个问题,我这边遇见这个问题是因为这个数据库服务因这几天下大雨,突然断电,导致数据库异常
前提小编还是要说好,出现这种情况,问题数据库是无法进行备份的,但是可以备份mdf文件和log日志文件,如果有DBA的话,最好是DBA来操作这个,毕竟小编也是个半斤八两,不是专业搞数据库的,包括下面的这些资料整理,有好多地方还是不是很理解的,所以大家一定要备份好mdf和日志文件。
废话不多说,开搞
小编也是个比较偏技术的人,宁愿花费时间去研究,也不会多废话浪费时间
1. 打开Microsoft SQL Server Management Studio,连接上数据库
1.1 点击【新建查询】,创建sql执行区域
1.2 修改出问题的数据库为紧急模式
sql 语句:ALTER DATABASE 库名 SET EMERGENCY
1.3 set可疑数据库变为单用户模式
sql 语句:ALTER DATABASE 库名 SET SINGLE_USER
1.4 修复数据库日志重新生成
此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。
DBCC CheckDB (库名 , REPAIR_ALLOW_DATA_LOSS)
命令执行完成后可能会出现以下警告:
警告: 数据库 ‘库名’ 的日志已重新生成。已失去事务的一致性。RESTORE 链已断开,服务器不再有以前的日志文件的上下文,因此您需要了解它们的内容。应运行 DBCC CHECKDB 验证物理一致性。数据库已置于 dbo-only 模式。在准备使数据库可用时,需要重置数据库选项,并删除所有多余的日志文件。
1.5 不用理会此警告,直接关闭Microsoft SQL Server Management Studio。
2. 重新打开Microsoft SQL Server Management Studio,
2.1 set使数据库变回为多用户模式
sql语句:ALTER DATABASE 库名 SET MULTI_USER
2.2 可能遇见的报错
此数据库处于单用户模式,删除是提示,当前某个用户已与其连接。 ALTER DATABASE 语句失败。 (Microsoft SQL Server,错误: 5064)
2.3 上述报错解决方法
USE [master] #调用master数据库
------------------------------------------------------------------------------------------------------
SET ANSI_NULLS ON #表示对空值(null)对等于(=)或不等于(<>)进行判断时,遵从 SQL-92 规则
------------------------------------------------------------------------------------------------------
SET QUOTED_IDENTIFIER ON ##表示使用 引用标识符,标识符可以用双引号分隔,但是,文字必须用单引号分隔
----------------------------------------------------------------------------------------------------
--建一个存储过程,断开所有用户连接。下面是一条命令
create proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
-------------------------------------------------------------------------------------------------------------------------
use master #再次调用master数据库
------------------------------------------------------------------------------------------------------------------------
exec killspid '出问题的数据库名' ##执行killapid操作
2.4 再次set使数据库变回为多用户模式
与上面的解决方法间隔时间短点最好
sql语句:ALTER DATABASE 库名 SET MULTI_USER
3. 关闭Microsoft SQL Server Management Studio
4. 重启sql server服务
4.1 cmd命令启动
开始->运行->输入cmd->打开DOS命令窗口,输入以下命令重启数据库服务
Net stop mssqlserver --停止服务
Net start mssqlserver --启动服务
再次,打开Sql Server 2008时被标记为“可疑”的数据库已恢复正常状态。
4.2 服务启动
直接在服务里面找到sql server 服务,重新启动此服务即刻