SQL Server 附加损坏的数据库
尝试附加到SQL Server的数据库可能已损坏的原因有很多:
- 有人错误地尝试通过分离+附加来修复可疑的数据库
- 可能是来自无法访问的服务器的损坏数据库,需要附加以进行灾难恢复
- 可能是你提供的数据库没有完全关闭(即存在活动事务)并且没有事务日志文件
在上述任何一种情况下,都无法使用常规方法将损坏的数据库附加到 SQL Server:sp_attach_db、CREATE DATABASE ... FOR ATTACH或CREATE DATABASE ... FOR ATTACH_REBUILD_LOG(后两者在 SQL Server 2005 之后)。要么数据文件损坏将阻止附加,要么日志文件损坏将阻止启动或完成崩溃恢复。
使用hack方法附加此类数据库。要完成的步骤如下:
- 需要使用的服务器实例与尝试附加的数据库版本相同时才有效
- 创建一个新数据库,具有相同的名称,相同数量的数据和日志文件,具有完全相同的文件名(非常重要!)和相同的文件 ID(确保您启用了即时文件初始化,以便文件创建不会需要很长时间)。如果你在数据库损坏之前向数据库添加或删除了文件,可能会很棘手,需要确保文件 ID 完全相同。
- 将新数据库设置为离线状态 ( ALTER DATABASE RealDatabaseName SET OFFLINE ) 或关闭服务器
- 从新数据库中删除所有数据和日志文件
- 将损坏的数据库中的数据和日志文件复制到新库目录中
- 将新数据库设置为在线(ALTER DATABASE RealDatabaseName SET ONLINE)或启动服务器
在这一点上,SQL Server 认为数据库已附加并且可以能够采取进一步措施来恢复数据库。
可能包括:
- 还原日志尾部备份
- 使用紧急模式将数据提取到新数据库中
- 使用紧急模式修复来修复损坏的事务日志
注意:如果数据库已经完全损坏即使是紧急模式修复也无法修复它。甚至无法使数据库进入紧急模式(例如,如果数据库启动页或主文件的文件头页损坏),则 SQL Server 无法访问数据库。此时唯一的选择是从备份中恢复。如果你没有备份,游戏结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律