重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 891|回复: 0
打印 上一主题 下一主题

SQLSERVER数据库显示可疑如何解决

[复制链接]
跳转到指定楼层
楼主
发表于 2023-2-17 20:28:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
无法打开数据库‘xxhis’。恢复操作已将该数据库标记为SUSPECT
当连接sql server 数据库的时候,发现某个库打不开的时候。爆出了这个‘无法打开数据库‘XXXX’。
    恢复操作已将该数据库标记为SUSPECT’错误,此时打开mssm来连接下数据库,
   会发现这个数据库后面被标上了“可疑两个字”

1. 原因
一般来说,小概率会遇见这个问题,我这边遇见这个问题是因为这个数据库服务N多年前停用了,属于古董级应用,开年了,要查N年前的数据,打开,结果数据库异常

前提,出现这种情况,问题数据库是无法进行备份的,但是可以备份mdf文件和log日志文件,一定要备份好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 服务,重新启动此服务即可

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-12-1 11:26 , Processed in 0.078688 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表