修复损坏的 SQL Server 数据库备份?

Jam*_*olt 5 sql-server corruption restore

我正在为备份到基于云的服务的人寻找问题。显然,客户的服务器在对基于云的服务的数据存储执行一些维护时崩溃,这使数据存储处于损坏状态。同时,客户的服务器因崩溃而无法恢复。

基于云的服务的开发人员必须编写一个脚本来查找属于数据库备份的数据块,并将它们拼接成一个文件。

这导致了一个备份 (.bak) 文件,我可以判断其中包含数据(我可以在其上运行“字符串”并查看标题,以及文件名、表名、数据行​​等),但不会' t 由 SQL Server 处理。我得到:

restore headeronly from disk = 'c:\restore.bak'

Msg 3241, Level 16, State 0, Line 1
The media family on device 'c:\restore.bak' is incorrectly formed. SQL Server cannot   
process this media family.
Msg 3013, Level 16, State 1, Line 1
RESTORE HEADERONLY is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)

死机上的源实例和我测试恢复的源实例都是 SQL Server 2008 R2,因此不幸的是,版本不匹配不是错误的根源。

我在十六进制编辑器 (xvi32) 中与另一个数据库的有效备份文件进行了比较,并注意到有效的备份文件以字节 0 处的字符串“tape”开头,但损坏的文件还有一些其他数据,对于 158 字节没有明显意义在那之前。我从损坏的备份中删除了 158 个字节,直到字符串“tape”,这让我走得更远。现在 'RESTORE FILELISTONLY' 起作用了,而在它之前抛出了与上面相同的错误。

“RESTORE HEADERONLY”现在显示“不完整”而不是抛出错误 3013。如果我在进程监视器中跟踪它,我可以看到它尝试在偏移量 7168 处读取 512 个字节,然后尝试在偏移量结束后读取另外 512 个字节文件。该文件几乎肯定是不完整的;根据基于云的服务中的报告工具,它最初是 95.8 MB,但在我的文件系统上只有 92.95 MB。

我尝试强制恢复部分修复的 (?) 文件:

restore database corrupt from disk = 'c:\restore_partiallyrepaired.bak' with continue_after_error, move 'corrupted' to 'c:\corrupt.mdf', move 'corrupted_log' to 'c:\corrupt.ldf'
Run Code Online (Sandbox Code Playgroud)

这使 SQL Server 崩溃,但提供了一个线索:

Date        3/3/2012 9:52:06 AM
Log     SQL Server (Archive #1 - 3/3/2012 9:52:00 AM)
Source      spid55
Message
The backup data at the end of "c:\restore_partiallyrepaired.bak" is incorrectly formatted.    
Backup sets on the media might be damaged and unusable. To determine the backup sets on 
the media, use RESTORE HEADERONLY. To determine the usability of the backup sets, run 
RESTORE VERIFYONLY. If all of the backup sets are incomplete, reformat the media using 
BACKUP WITH FORMAT, which destroys all the backup sets.




 RESTORE detected an error on page (48:538976288) in database "corrupt" as read from the   
 backup set.

 Hit Fatal Error: Server is terminating
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法来“hack-attaching”还原生成的 42.5 MB MDF,但是使用 DBCC CHECKDB 无法修复它。

在这一点上,我将把它连同我的发现一起发送回基于云的服务的支持团队,看看这是否为他们提供了有关如何提取未损坏文件的任何线索。

我想我的问题是:

1) 还有什么我可以在这里尝试的吗?

2) 你认识的有谁可以在收费的基础上提供帮助吗?例如,MS 支持人员或一些前 MS 顾问可以将此备份文件破解为可用格式吗?

谢谢!

Bre*_*zar 5

我确实认识一位做这种工作的顾问,但它远不及便宜 - 想想五位数开始这个项目,提前支付。这不适合胆小的人,您只想走那条路线作为最后的手段。