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)和单用户模式。