首页 > 数据库 >如何修复处于recovery挂起状态的数据库

如何修复处于recovery挂起状态的数据库

时间:2022-11-12 13:22:08浏览次数:44  
标签:repair SET recovery DATABASE 数据库 挂起 DATABASENAME ALTER

检查数据库的状态
数据库的状态有:online、offline、restoring、recovering、suspect、emergency、recovery pending

SELECT name, state_desc from sys.databases

 

可能导致恢复挂起的原因
如果处于recovery pending状态了,就表示恢复过程失败了。但数据库未必已经损坏。
原因会有很多种,比如:
1.由于硬件、电池等故障,sqlserver宕机了。当数据库非正常关闭时,一个或多个活跃事务还未完成,但是事务日志被删除了
2.磁盘空间、内存不足了,这种情况下,数据库无法启动恢复过程
3.日志文件损坏了
4.数据文件损坏了

 

如何修复?
在修复之前,要确保你有备份存在。
最好的方式就就是先查看错误日志。


方法1:将数据库状态设置为online
·要保证有足够的磁盘空间用户恢复
·将数据库状态设置为online
·执行CheckDB(不加repair选项)

ALTER DATABASE [DATABASENAME] SET ONLINE;
 
DBCC CHECKDB('DATABASENAME') WITH NO_INFOMSGS;

如果上面的命令成功运行,没有任何警告,数据库就不需要做任何修复

 

方法2:重建日志文件(紧急模式)
如果错误日志显示是由于日志文件丢失而导致的,比如删除、重命名或损坏:
·将数据库置于紧急模式下
·分离数据库(将其offline)
·重新附加(将其online)

ALTER DATABASE [DATABASENAME] SET EMERGENCY;
 
ALTER DATABASE [DATABASENAME] set multi_user;
 
EXEC sp_detach_db '[DATABASENAME]';
 
EXEC sp_attach_single_file_db @DBName = '[DATABASENAME]', @physname = N'MDF_FILE_FULL_PATCH';

系统会自动移除损坏的日志并重建一个。

 

方法3:使用DBCC CHECKDB初始化(加上repair选项)
repair选项,一般不建议使用,只是作为实在没有办法时的选择。有多个repair级别,先从repair_rebuild级别开始,这样不会丢失数据:
·将数据库置于单用户模式
·执行DBCC CHECKDB(带上repair_rebuild选项)
·将数据库设置成online和多用户模式

ALTER DATABASE [DATABASENAME] SET SINGLE_USER;
 
DBCC CHECKDB (DATABASENAME,REPAIR_REBUILD) WITH NO_INFOMSGS,ALL_ERRORMSGS;
 
ALTER DATABASE [DATABASENAME] SET ONLINE;
 
ALTER DATABASE [DATABASENAME] SET MULTI_USER;

如果修复没有成功,再将级别设置成REPAIR_ALLOW_DATA_LOSS:顾名思义,这种级别会有数据丢失
·将数据库置于紧急模式
·执行DBCC CHECKDB(带上repair_allow_data_loss选项)
·将数据库设置成online和多用户模式

ALTER DATABASE [DATABASENAME] SET EMERGENCY;
 
ALTER DATABASE [DATABASENAME] SET SINGLE_USER;
 
DBCC CHECKDB (DATABASENAME,REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS,ALL_ERRORMSGS;
 
ALTER DATABASE [DATABASENAME] SET ONLINE;
 
ALTER DATABASE [DATABASENAME] SET MULTI_USER;

  

标签:repair,SET,recovery,DATABASE,数据库,挂起,DATABASENAME,ALTER
From: https://www.cnblogs.com/abclife/p/16880333.html

相关文章

  • Redis数据库安全之旅
    前言​​Redis​​相信大家都或多或少都听说过吧,作为内存数据库的代表,但是近些年​​Redis​​ 被攻击的典范也是越来越多,我们将如何防护​​Redis​​ 安全呢?跟着......
  • 达梦数据库DEM管理
    DM 企业管理器的英文简称DMEnterpriseManager(DEM)。提供一个通过WEB 界面来监控,管理,维护DM数据库的集中式管理平台,可以从任何可以访问web应用的位置通过DEM来对DM数据......
  • 第二章 关系数据库
    2.1关系数据结构集形式化定义2.1.1关系域:一组具有相同数据类型的值的集合。例:{0,1}{男,女}笛卡儿积:域上的一种集合运算关系:关系中涉及的码:候选码:某......
  • 篇(3)-Asp.Net Core入门实战-数据库配置说明
    入门实战-创建数据库和安装NuGet软件包注意,我们用到asp.netcore新功能中的所谓CodeFirst或者DbFirst,我们先不管这功能,为了快速上手简单功能,我计划使用EF(微软新的数据......
  • jdbc连接Oracle数据库
    importjava.sql.*;publicclassMain{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");Connectionconnection......
  • Mysql数据库函数-单行函数
    一.单行函数:可以理解为向函数传入一个参数,返回一个值。单行函数是指对每一题记录输入值进行计算,并得到相应的计算结果,然后返回给用户,也就是说,每条记录作为一个输入参数,经......
  • thinkPHP查询数据库常用函数
      1.find()  查询一条数据2.field()  查询的字段如field('id,name,age')3.select()  查询多条数据4.setField()  修改一个字段或多个字段值  如se......
  • 数据库架构演变概要
    数据库架构演变概要一.背景为了适应业务增长,数据库数据量快速增长,性能日趋下降,稳定性不佳的实际情况,急需架构逐步演变适应未来的业务发展。二.现状【......
  • 数据库范式与反范式设计,是一门艺术
    正文共: 2251字3图  预计阅读时间: 6分钟前言在日常业务研发过程中,我们常常需要与数据库表打交道。设计范式是数据表设计的基本原则,对于数据表的设计范式,我们特别容易忽......
  • Android数据库学习123
    我个人感觉安卓自带的数据库用的不是太多的,毕竟现在很多应用都直接和服务器数据库进行交互,或者直接API获取一些接口的数据,但是不可否认自带的数据库还是有一些作用的,所以我......