我正在为备份到基于云的服务的人寻找问题。显然,客户的服务器在对基于云的服务的数据存储执行一些维护时崩溃,这使数据存储处于损坏状态。同时,客户的服务器因崩溃而无法恢复。
基于云的服务的开发人员必须编写一个脚本来查找属于数据库备份的数据块,并将它们拼接成一个文件。
这导致了一个备份 (.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 …