RESTORE在从备份集中读取的数据库<database>中的页面(0:0)上检测到错误

我正在尝试将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文件,并得到了同样的错误。 我问其他人访问相同的备份文件,他们可以恢复它没有任何问题。 有任何想法吗?

检查您是否使用FTP以二进制传输模式下载。 大多数客户端将尝试自动检测,然后回退到二进制。 .bak可能不会被识别为二​​进制,因此可能会将所有\n转换为\r\n ,破坏数据。

如果不是这种情况,请确保您尝试还原的服务器版本是新的或等于原始备份的服务器版本。 请参阅SELECT @@VERSION ,以便于比较检查。

除此之外,假设原始备份在别处工作正常,做两个文件的二进制校验和…也许一些磁盘错误或其他传输正在导致腐败。 您可以使用fciv.exe -add c:\database.bak或类似的实用程序来计算校验和。

也可以对损坏的数据库进行良好的备份。 原来的数据库可能是腐败的 – 我不知道为什么它会在其他地方成功恢复,但可能会发生。 您可以通过运行DBCC CHECKDB('DatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS在服务器上进行备份来validation原始数据库。