我知道问题的答案可能会有所不同,具体取决于每个文件中究竟损坏了什么.mdf
- 只有在有另一种方法可以解决这个问题时才寻求建议。
所以,我从数据库管理员那里收到了一些坏消息。昨晚发生了这样的事情(这是我从他那里得到的唯一信息):
- 驱动器发生故障
- 驱动器已更换,但在重建过程中再次失败......
- 它是新驱动器,因此已移至机箱上的不同驱动器插槽
- 执行上述操作时,我错误地拉出了 cachcade 驱动器,该驱动器又锁定了具有 cachecade 保护的任何卷
- 重新插入 cachecade 驱动器后,驱动器活动恢复(驱动器进入“锁定”状态)
似乎上述步骤导致.mdf
文件损坏并且无法正常工作。force attached
因此,我们按照以下步骤开始为他们创建新的 SQL 实例:
- 创建新数据库
- 删除它的文件
添加损坏的
.mdf
文件ldf
并使用以下脚本恢复它们:USE master GO ALTER DATABASE [] MODIFY FILE(NAME='', FILENAME= '') ALTER DATABASE [] MODIFY FILE(NAME='', FILENAME= '') GO ALTER DATABASE [] SET ONLINE GO DBCC TRACEON(3604) GO ALTER DATABASE [] SET EMERGENCY GO ALTER DATABASE [] SET SINGLE_USER GO DBCC CHECKDB('[]', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS GO ALTER DATABASE [] SET MULTI_USER GO
他还告诉我,
Repair errors are different per database
有些database
根本无法修复。
那么,我是否还有其他选择,或者我需要检查每个数据库的上述情况,并将一些数据(如果可能)移动到手动从旧副本恢复的数据库中?
如果是我呢?
停止任何依赖此数据库的进程并从最近的备份中恢复。
在你稳定之后,你可以通过学术练习尝试修复尽可能多的损坏媒体,因为你有足够的精力和预算来忍受。假设您对该媒体的上游和下游依赖关系有深刻的了解,您可能能够从逻辑上修复恢复在上次稳定备份结束和中断之间的时间内丢失的一些数据。