SQL Server 2014 一个项目数据库做大数据量delete 长时间未完成,执行kill无响应后,运维人员对SQL Server进行了强制重启。重启后有时该数据库处于无法访问状态,再重启(关闭Server服务,等待3分钟后启动)有时可以访问数据库,但该库中与最初delete有关的几个数据表无法访问。执行任何DML、DDL操作,均处于被阻塞无响应的状态,阻塞源为SQL Server系统会话(状态为DB Startup)。该数据库状态为online,log_reuse_wait_desc状态为:CHECKPOINT 或 Active_Transaction
最后通过停机后,删除物理日志文件,重建一个空的同名日志文件,附加后,rebuild log 解决。
建议后续使用SQL Server 2016及以上版本,2014貌似有不少问题,或至少更新至SP3以上补丁。
数据库SQL Server 2000如何修复置疑的数据库(日志损坏)
use master
sp_configure 'allow updates',1
reconfigure with override
exec sp_dboption @databasename, N'single', N'true'
update sysdatabases set status=-32768 where dbid=db_id('换成自己数据库名');
dbcc rebuild_log('换成自己数据库名', 'C:\Program Files\Microsoft SQL Server 2000\Data\数据库日志文件名.LDF')
dbcc checkdb('换成自己数据库名')
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'
sql server 2005 日志损坏
use master
declare @databasename varchar(255)
set @databasename='要恢复的数据库名称'
exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态
SQL Server 2008 R2 - Rebuild Log
use master
ALTER DATABASE [dbname] SET EMERGENCY
ALTER DATABASE my_db SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE my_db REBUILD LOG ON (NAME=my_db,FILENAME='C:\MSSQL\Data\my_db_log.ldf')
DBCC CHECKDB ([dbname])
ALTER DATABASE my_db SET MULTI_USER WITH ROLLBACK IMMEDIATE;
SQL Server如何附加只有mdf的数据库文件
有时候SQL Server意外断电会导致SQL Server的ldf日志文件丢失或者损坏,这个时候你如果直接附加mdf文件到SQL Server会失败,这里提供一个方法可以还原只有mdf的数据库文件,这里我们假设你要还原的数据库文件是YourDB.mdf
- 首先在SQL Server中创建一个同名的数据库,叫[YourDB]。
- 然后停止SQL Server的数据库引擎服务,拷贝原先的YourDB.mdf到你刚才新建的[YourDB]数据库的文件目录并覆盖之。
- 启动SQL Server的数据库引擎服务
- 之后你会发现[YourDB]这个数据在SQL Server的状态是(Recovery Pending)
- 依次执行下面脚本:
ALTER DATABASE [YourDB] SET EMERGENCY
DBCC checkdb([YourDB]) ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DBCC CheckDB ([YourDB], REPAIR_ALLOW_DATA_LOSS) ALTER DATABASE [YourDB] SET MULTI_USER - 之后就应该可以在SQL Server中正常使用和访问[YourDB]数据库了
这个方法适合还原那些没有损坏的mdf数据库文件到Sql Server,但是如过你的mdf文件因为意外情况(比如服务器意外断电)导致其损坏,那这个方法还是不行。遇到这种情况只有通过像ApexSQL这样的专业工具来恢复数据了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?