需要帮助恢复损坏的 SQL 数据库

需要帮助恢复损坏的 SQL 数据库

我有一个非常特殊的案例,我已经研究了好几天了。我有一个非常大的 SQL Server 2008 数据库(大约 2 TB),其中包含 500 个文件组,以支持非常大的分区表。最近,我们的一个驱动器发生了灾难性故障,丢失了几个文件组,数据库变得无法访问。

我们每天都会进行文件组备份,但由于其他问题,我们丢失了最新的日志和主文件组备份。我们备份了所有数据,但主文件组备份很旧。

自主文件组备份以来,没有任何模式更改,但是 lsn 现在全部不同步,我们无法恢复数据。

我尝试了所有能想到的方法(也尝试了几乎所有我能在 Google 上找到的技巧和窍门),但最终还是会收到相同的消息,提示文件组 x 的文件与主文件组不匹配。我现在正试图编辑系统表(我们有一个单独的临时环境来执行此操作,因此我们不必担心会损坏任何生产数据库)。我尝试更新 sys.sysdbreg、sys.sysbrickfiles 和 sys.sysprufiles,试图欺骗 SQL 认为所有文件都在线,但“Select * From OPENROWSET(TABLE DBPROP, 5)”显示的数据库状态与我在 sys.sysdbreg 中看到的不同。

我现在认为我需要以某种方式编辑实际数据文件的标题以尝试将 lsn 与主文件对齐。

我很感激任何人能在这里给我的帮助,但请不要回复诸如“你不应该编辑 mdf、ndf 文件……”或“查看 msdn 文章……”等内容。这是一个高级紧急情况,我需要一个真正的黑客,这样我们就可以获取这个损坏数据库中的数据并导出到一个全新的数据库。我知道有一种方法可以做到这一点,但不知道 DBPROP 系统函数的作用(即它查看系统表还是实际打开文件)使我无法试图弄清楚如何欺骗 SQL 允许我读取这些文件。

谢谢你的帮助。

答案1

我看到你未来有两个选择。

  1. 给 PSS 打电话开一张票。他们得花点时间才能做出任何反应。
  2. 打电话给 SQLskills(具体来说是 Paul),看看他能做些什么。我知道 Paul 以前曾使用十六进制编辑器成功破解过一个数据库。Paul 并不便宜,但他能完成工作。

祝你好运。

答案2

致电 Microsoft PSS:打开 A 级支持案例。没有比这更好的了。预计会付费。可能很多。

答案3

我们已经使用了 PSS 路线,但他们帮不上什么忙。他们只是给了我们一个标准答案:“备份/恢复不是设计为那样工作的,我们不支持黑客攻击。”(谢谢 MS,非常有帮助。我记得 12 年前,PSS 有一个小组可以帮助处理此类紧急情况。)

我浏览了 Paul 的博客,发现一些信息非常有用,但没有关于如何直接从文件中读取 IAM、GAM、SGAM 等项目的信息。我知道如果我能得到这些信息,我就可以编辑 sys.sysallocunits 表来修复指向所有分区的数据页的指针。我正在尝试使用 Office Recovery 的恢复工具,它似乎能够读取数据,所以数据一定是可恢复的。我只是想得到

答案4

是的,从更新的备份中恢复数据库是恢复所有数据的最佳方法。如果您没有任何更新的备份,那么您可以选择紧急修复选项。

两个月前,我与格兰特·弗里奇,他是 Microsoft Data Platform MVP,负责 SQL 数据库的紧急修复。他审查了SQL修复软件并在他的博客上发表评论。

相关内容