我正在尝试在SQL Server中还原.BAK,但出现以下错误:


消息3241,级别16,状态7,行1设备'c:\ glyn上的媒体系列\ JA.bak'格式错误。 SQL Server无法处理此媒体系列。消息3013,级别16,状态1,第1行RESTORE DATABASE异常终止。


我尝试使用2012、2008甚至2005进行还原,但是没有任何效果,我使用了以下查询并通过Tasks >> Back up进行操作,但没有任何效果,这是我的SQL:

RESTORE DATABASE JA FROM DISK='c:\glyn\JA.bak'


有人有什么建议吗?我已经阅读过bak可能已损坏,它是由另一位从事该项目的DVD开发人员发送给我的。

评论

我已经在sqlbak.com/blog/media-family-on-device-is-incorrectly-formed中找到了解决方案

#1 楼

如果尝试将较新的数据库还原到较旧的SQL版本,则始终可以简单地在较旧的SQL版本中手动创建数据库并利用任务-生成脚本并包含数据。

保存到文件- >高级->要编写脚本的数据类型->模式和数据。

还请确保使用服务器版本的脚本。

如果可能的话,这可能是唯一受支持的选项您正在尝试从新的SQL Server到旧版本。

相关:将SQL Server 2012备份还原到SQL Server 2008数据库?

评论


看起来像是骇客,但我想这对我来说可以解决此问题。

– jpierson
16-10-31在19:12

#2 楼

我发现这表明您的备份文件已损坏。可能是通过FTP以文本方式而不是二进制方式传输的。

此博客列出了其他人如何解决同一问题。

评论


通常,在SE网站上“列出其他人如何解决相同的问题”,您应该发布相关内容,例如博客文章;它防止链接衰减

– jcollum
2014年12月31日20:57在

#3 楼

我遇到了同样的问题,我的脚本指定了错误的FILE类型,我使用的是.bak,而我指定的是FILE = 2,即.trn

USE [master]
RESTORE DATABASE [MyNewDB] FROM
DISK = N'D:\MyOldDB.bak'
WITH
    FILE = 1, -- 1 = .bak, 2 = .trn type backup
    MOVE N'MyOldDB' TO N'd:\data\MyOldDB.mdf',
    MOVE N'MyOldDB_log' TO N'd:\data\MyOldDB_log.ldf',
    NOUNLOAD,
    STATS = 5    
GO


我不是确保RESTORE命令是否为此自动检测或设置默认值...

评论


该错误解决了这个问题,问题是当您使用GUI还原数据库时,SQL Managment Studio没有为您提供详细信息。如果尝试使用t-sql脚本还原,则sql server将报告您使用MOVE选项。

– dlopezgonzalez
2015年12月1日,9:37

#4 楼

在源和目标SQL Server上运行以下脚本,版本应匹配,或者目标应具有更高版本的SQL Server,否则您将无法还原.bak文件:

SELECT @@Version


评论


关于版本的观点已经在其他答案中重复了。

– Andriy M
16年5月21日在23:01

@AndriyM,您是对的,但没有采取实际行动。我们不是在谈论历史或地理,应该提到一些命令或代码。

– Shadi Namrouti
16年5月22日在10:45

#5 楼

唯一的原因是您尝试还原较低版本的备份,
请参考:http://www.sqlservercentral.com/Forums/Topic1675066-1550-1.aspx?Update=1

#6 楼

删除损坏的文件并重新运行备份

评论


您好,欢迎来到该网站。我们想要更多地了解为什么或如何工作。

–汤姆五世
16-10-27在20:27