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 无法访问数据库。此时唯一的选择是从备份中恢复。如果你没有备份,游戏结束。