MSSQL数据库一直显示“正在恢复”或“可疑”的解决办法

0    635    2

Tags:

👉 本文共约1556个字,系统预计阅读时间或需6分钟。

现象

正在恢复

由于磁盘空间满了,数据库处于“恢复挂起”状态,清理磁盘后,重启SQL Server服务器后,数据库一直显示“正在恢复”,用sp_who2查询显示该库处于“DB STARTUP”状态。

查询数据库阻塞,发现有个系统进程9在阻塞,然后使用kill 9报错:只能终止用户进程

数据库可疑

若一直“正在恢复”,或显示“可疑”(Suspect),在 SQL Server 中,如果某个数据库被标记为“可疑”(Suspect),这通常意味着该数据库的事务日志文件(.ldf)可能损坏或丢失。当一个数据库的日志文件不可用时,SQL Server 无法保证数据库的一致性,因此会将数据库状态设置为“可疑”。

可以查询告警日志是否有如下输出:

若有,则说明恢复出现问题,可以使用本文的方法2进行恢复。

分析

恢复状态通常是“RECOVERING”。

首先查看进程的状态变化,物理IO和逻辑IO,如果没有变化,则先做1次SQL Server实例的关闭和启动,然后再查看进程的状态变化。

如果物理IO和逻辑IO有变化,则说明在恢复中,只需要等待即可,不需要做任何操作。

恢复进入到后期时,percent_complete列也会指示恢复的进度。

若没有变化,则可能需要按照如下的几种方式来恢复。

请不要轻易使用如下方法。

解决

方法1

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!

可能会报错:

  • 用户没有更改数据库 'TEST' 的权限,该数据库不存在或数据库未处于允许访问检查的状态----解决:需要等待恢复完成或恢复报错
  • 由于无法在数据库 'PT_STORE' 上放置锁,ALTER DATABASE 失败”

可以尝试方法2和方法3。

方法2

请注意,上述命令将数据库设置为紧急模式,然后修复数据库。但这可能导致数据丢失。在执行此操作之前,请务必进行备份,并在理解潜在风险的情况下执行。

可能会报错:

  • 用户没有更改数据库 'TEST' 的权限,该数据库不存在或数据库未处于允许访问检查的状态
  • 由于无法在数据库 'PT_STORE' 上放置锁,ALTER DATABASE 失败”

方法3:已实践,比较靠谱

1.停用SQL Server服务

2.将数据库的.mdf和.ldf文件修改为其它名称,例如添加bk结尾

3.启用SQL Server服务

4.右键删除数据库

5.将第二步更名后的.mdf和.ldf文件名称改回原来的数据库文件名。

6.在管理工具中重新附加数据库(日志较多时,可能会比较慢)。

总结

1、还原或恢复数据库的进度可以通过sys.dm_exec_requests er的percent_complete字段来查询,也可以在还原的时候添加STATS=10这个选项来显示还原的进度。参考:https://www.dbaup.com/shujukudangqianhuihuachaxunhuizongdangqianxingnengwentikuaisufenxi.html

2、使用sa用户或Windows身份验证登陆

3、新建1433的防火墙规则,禁止其它客户端登陆

参考

https://www.cnblogs.com/KJXY/articles/14850606.html

https://zhuanlan.zhihu.com/p/691677356

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复