sql server数据库处于挂起状态

本文详细介绍了如何处理SQLServer数据库处于恢复挂起状态的情况,包括检查状态、可能的原因、以及使用CheckDB、重建日志文件和DBCCCHECKDBwithrepair选项进行修复的方法。强调在操作前备份的重要性。
摘要由CSDN通过智能技术生成
如何修复处于recovery挂起状态的数据库
检查数据库的状态

数据库的状态有: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;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server数据库出现挂起(suspended)状态时,可能是由于多种原因导致的,例如系统资源不足、长时间的锁等待、长时间的阻塞等。为了恢复数据库的正常运行,可以采取以下几个步骤: 1. 找出导致数据库挂起的原因:通过查看SQL Server的错误日志、系统日志以及活动监视器等工具,可以获得关于挂起原因的详细信息。这些信息有助于定位问题及制定恢复策略。 2. 解决导致数据库挂起的问题:根据挂起原因采取相应的解决措施。例如,如果是系统资源不足导致的挂起,可以优化数据库的查询语句,调整系统的内存和CPU分配等;如果是长时间的锁等待导致的挂起,可以检查并优化数据库的索引、重构查询语句等;如果是长时间的阻塞导致的挂起,可以找到并解决造成阻塞的会话。 3. 重新启动数据库服务:在解决了导致数据库挂起的问题后,可尝试重新启动SQL Server数据库服务。重启后,数据库将重新加载并尝试自动恢复到正常运行状态。 4. 数据库恢复技术:如果上述步骤无法解决数据库挂起问题,可以采用数据库恢复技术来修复数据库。例如,可以使用SQL Server的日志备份和还原功能来还原数据库到某个时间点的状态,或者使用数据库镜像、数据库复制等技术来实现数据库的高可用性和故障转移。 在实际操作中,根据具体的情况选择合适的恢复策略。尽量避免数据库挂起的发生,可以通过定期优化数据库的性能、监控系统资源的使用情况、合理设置数据库参数等方式进行预防。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值