SQL Server 数据库损坏修复
当数据库损坏时可以在数据库上先运行 DBCC CHECKDB,以了解损坏情况和相关信息。
根据备份修复:
- 如果只有一个页面被损坏,可以进行单页面恢复。
- 如果只有一个文件组被损坏,可以执行单个文件组还原。
- 如果是非聚集索引损坏
BEGIN TRANSACTION; ALTER INDEX IndexName ON TableName DISABLE; ALTER INDEX IndexName ON TableName REBUILD WITH (ONLINE = ON); COMMIT TRANSACTION;
注意事项:
- 如果你的数据库已损坏,请不要尝试将其从实例中分离,因为可能无法再次附加连接它,因为已损坏。尤其是数据库状态为 SUSPECT的时候。
- 如果你的 SQL Server 实例已损坏,并且数据库也已损坏,请不要尝试将其附加到较新版本的 SQL Server或升级,因为升级可能会失败导致数据库无法附加到任一版SQL Server 的旧版本或新版本。
- 如果崩溃恢复正在运行,请不要试图关闭 SQL Server 并删除日志文件。这保证至少会导致数据不一致和最坏的损坏。崩溃恢复有时可能需要很长时间,具体取决于崩溃时必须回滚的打开事务的长度。
- 某些情况下的损坏是无法修复(例如损坏的表元数据),这时"必须"使用备份或冗余副本还原。
- 最后可以尝试REPAIR_ALLOW_DATA_LOSS的方式进行修复(可能会丢失数据以进行修复)。由于损坏无法执行REPAIR_ALLOW_DATA_LOSS时将数据库设置为紧急状态(失败的话可以尝试先OFFLINE然后ONLINE)和单用户模式。
【推荐】国内首个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 绘制太阳,地球,月球 运作规律