我正在尝试将 SQL Server 2012 .BAK 文件还原到我的本地服务器。我之前曾成功还原过此 .BAK 文件。但是现在,当我尝试时,我收到以下错误:
RESTORE 在从备份集中读取数据库“databasename”中的页面 (0:0) 时检测到错误。
运行以下命令有效:
RESTORE HEADERONLY FROM DISK = 'D:\database.bak'
但是,运行以下命令:
RESTORE VERIFYONLY FROM DISK = 'D:\database.bak'
返回以下错误:
Msg 3203, Level 16, State 1, Line 1
Read on "D:\database.bak" failed: 13(The data is invalid.)
Msg 3013, Level 16, State 1, Line 1
VERIFY DATABASE is terminating abnormally.
今天早上我再次从 FTP 服务器下载了 .BAK 文件,但出现了同样的错误。我询问了其他有权访问同一备份文件的人,他们能够毫无问题地恢复它。有什么想法吗?
答案1
检查您是否使用 FTP 以二进制传输模式下载。大多数客户端将尝试自动检测,然后返回二进制。 .bak
可能无法识别为二进制,因此可能会将所有\n
转换为\r\n
,从而损坏数据。
如果不是这种情况,请确保您尝试恢复的服务器版本比原始备份的服务器版本更新或相同。请参阅SELECT @@VERSION
以进行简单的比较检查。
除此之外,假设原始备份在其他地方工作正常,对两个文件进行二进制校验……可能是某些磁盘错误或其他传输导致损坏。您可以使用fciv.exe -add c:\database.bak
或类似的实用程序来计算校验和。
还可以对损坏的数据库进行良好的备份。原始数据库可能已损坏 - 我不知道为什么它可以在其他地方成功恢复,但这种情况可能会发生。您可以通过DBCC CHECKDB('DatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS
在备份的服务器上运行来验证原始数据库。