无法打开数据库‘XXXX’。恢复操作已将该数据库标记为SUSPECT或者打开Microsoft SQL Server Management Studio发现数据库被标为可疑的解决办法
  zZHnZavbRDNq 2023年11月02日 28 0


无法打开数据库‘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 服务,重新启动此服务即刻


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
zZHnZavbRDNq