SQL Server还原备份导致错误


15

我在dev(Windows Server 2008上的SQL Server 2005)中有一个数据库,需要转移到prod(Windows Server 2003上的SQL Server 2000)。我的过程如下:

  1. 登录到开发人员,打开SQL Server Management Studio
  2. 右键单击数据库| 任务 备份。保留所有默认选项(完整备份等)
  3. 将.bak文件本地移动到产品(没有网络驱动器),登录到产品,然后打开SQL Server企业管理器。
  4. 右键单击“数据库”节点| 所有任务| 恢复数据库。
  5. 更改“还原为数据库”以反映相同的数据库名称。
  6. 单击“从设备”单选按钮。点击“选择设备”
  7. 单击从以下位置还原:添加...,浏览到.bak文件(小-仅6mb)

现在,我准备还原数据库,因此单击“确定”并得到以下错误:

“设备'E:... bak'上的媒体族格式不正确。SQLServer无法处理该媒体族。RESTOREDATABASE异常终止。”

此错误是立即的。

我尝试了几种不同的变体-使用不同的数据库名称和日志文件名(它起源的地方)将数据库还原到开发机,创建一个空的数据库,该数据库之前具有相同的文件物理路径,并尝试还原到该数据库,制作几个不同的.bak文件,并确保在将它们上传到产品之前已通过验证。我知道一个事实,.mdf和.ldf文件的目录存在于prod上,尽管文件本身不存在。如果在单击“确定”还原之前,请转到“选项”选项卡,但出现以下错误:

错误3241:设备'E:... bak'上的媒体系列格式错误。SQL Server无法处理此媒体系列。RESTORE FILELIST正在异常终止。

有人有什么好主意吗?


我同意,只是花了一天时间而浪费了我的时间,这似乎是向后兼容的问题,在我看来,是2k8 R2到2k5。

Answers:


7

MSSQL2008中的备份标头与MSSQL2005中的备份标头不同,这很可能是问题的根源。尝试导出数据库而不是备份-还原范例,或者在DEV服务器上设置MSSQL2008。


4

正如Mike Dimmick所说-SQL 2000无法识别SQL 2005备份(就像Word 2000无法识别2007的DOCX文件一样)。因此,您必须以较低的公分母格式(例如SQL脚本)迁移数据。尝试使用数据库发布向导,该向导SQL Server Hosting Toolkit的一部分,该工具包会为架构和数据生成单个SQL文件。


1
重要的是要检查是否已安装SqlExpress(可能没有意识到就安装了SqlExpress)。错误登录到SqlExpress并随后出现紧急情况非常容易,因为它不允许您将2008数据库还原到该数据库。这可能是导致此错误的非常普遍的原因。
西蒙2010年

2

您可以将备份在SQL Server家族中(即2000到2005或2008)向前移动,但不能向后移动:您不能在SQL Server 2000上还原SQL Server 2005备份。


1

尝试还原时,可能是权限问题导致文件无法创建。尝试在目标服务器上以所需的名称创建新数据库,然后在其顶部进行还原。

另外,如果您尝试从外部硬盘驱动器或网络共享还原备份,请尝试将备份文件复制到本地计算机,然后再尝试还原。


1

默认情况下,有两个来自SQL Server 2005的对象资源管理器。我猜您正在尝试使用server / sqlexpress对象。尝试还原到另一个。


1

(松了一口气。)啊,这就是问题所在。

我在远程PC上运行SQL Server 2008 SP1。我备份了数据库,但是无法从.bak文件还原我的SQL Server 2008 本地副本。

正如[Yini]所说,这取决于我在本地PC而不是SQL Server 2008实例上打开SQL Server 2005实例的SQL Server 2008副本。天才。

我完全同意[Yini]-公平地讲,您不能将SQL Server 2008备份还原到2005实例中,但是Microsoft至少可以给我们一个不错的错误消息。

“设备'D:\ DatabaseBackup_21_02_2011.bak'上的媒体系列格式错误。SQLServer无法处理该媒体系列。”

我的备份格式不正确。即使我正在运行SQL Server 2008 SP1,也无法将其还原到SQL Server 2005实例中

将其放入错误消息中真的那么困难吗?


0

一些想法:

  • 您要还原的数据库大小约为多少?关于此错误
    的唯一支持文章是针对SQL 2000的,并讨论了较大的日志文件。当您不在使用SQL 2000时,如果日志特别大,可能会尝试先减小日志的大小。

  • 您是否能够将数据库还原到Dev服务器上(作为不同的数据库名称,不同的文件)?就SQL 2005而言,这将证明文件本身是否很好。

  • 您是否可以将其他数据库从该开发服务器还原到Prod?


0

大家好,正如Mike所建议的,我会推荐数据库发布向导,它的工作非常出色。

这是我最初使用的一种变通方法,我不会完全建议使用-似乎有些隔墙


1)在prod上创建数据库,创建具有适当权限的db用户,在防火墙上打开允许远程访问的端口
2)在SQL Server Management Studio中的dev中,右键单击db-> task-> export data。选择目的地时,请确保指定端口xxx.xxx.xxx.xxx,1764。
3)选择要转移的所有表,然后单击下100次,操作完成。

警告:这不会复制存储过程。
警告:这不会复制int列的标识

更新:它看起来像你不能去2005年到2000年,我发现下面的帖子链接的文字 -这听起来像你可以用我上面的方法,但你也想剧本中的所有对象,然后运行2000年。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.