SQL Server恢复挂起处理

⚠️重要前置:优先拷贝 mdf/ldf 文件做物理备份;有备份优先还原备份,REPAIR_ALLOW_DATA_LOSS会丢失损坏页的数据,属于最后手段。

恢复挂起含义:SQL Server 尝试崩溃恢复,但因条件不足无法完成恢复,数据库不可访问。

常见诱因:磁盘满、权限不足、ldf 日志损坏 / 丢失、异常断电宕机、文件被杀毒 / 备份软件占用、磁盘 IO 故障。

1、确认状态 + 看错误日志

USE master;
GO
SELECT name,state_desc FROM sys.databases WHERE name='你的库名';
GO
-- 查看错误日志,定位真实报错
EXEC sp_readerrorlog 0,1,N'你的库名';
GO

2、日志文件损坏 / 丢失 → 重建日志文件

适合:日志 ldf 损坏、删除,mdf 完好。

USE master
GO
-- 进入紧急模式
ALTER DATABASE [你的库名] SET EMERGENCY;
GO
ALTER DATABASE [你的库名] SET MULTI_USER;
GO
-- 分离数据库
EXEC sp_detach_db @dbname='你的库名';
GO
-- 仅附加mdf,自动重建ldf日志文件,填写你的mdf完整路径
EXEC sp_attach_single_file_db @dbname='你的库名',@physname=N'D:\data\你的库.mdf';
GO

3、AlwaysOn 可用性组下出现 Recovery Pending正在还原

执行结束还原,并让数据库进入正常状态:

RESTORE DATABASE [库名] WITH RECOVERY;