还原数据库失败:设备上的媒体簇的结构不正确,错误:3241

时间:2024-03-10 08:53:46

在还原数据库的时候,会遇到如下提示,设备 \'D:\aaa.bak\' 上的介质簇的结构不正确。SQL Server 无法处理此介质簇
产生的原因有3种:
一、备份bak文件和你要还原过去的程序版本不一致,可以通过select @@version查看2边的具体版本。一般大版本一致就基本没问题。
二、备份bak文件拷贝的过程中损坏了或者变小了,比如原来是5G,考过去变成了4.9G,那还原肯定就要报错,解决办法就是把bak打包考过去。(比如有时候通过堡垒机进行传文件,或者共享传文件容易出现)
三、备份的bak文件有多个,你考的时候少考了,考得不完整导致的。

 

针对版本不对导致的异常(一般是高版本的数据库备份在低版本中还原,不兼容导致),可通过如下方式解决:

在备份的SQL Server 2012 数据库上生成脚本语言,然后在SQL Server 2008R2上执行。

1、首先把要把sql2012中要备份的数据库设置为兼容2008. 右键sql2012中的数据库Test-属性-选项  看到如下图      
 
如何把高版本的sqlserver <wbr>还原到低版本的 <wbr>sqlserver?
2、右键Test-任务-生成脚本,下一步-下一步到达下图,点 高级  选项。把script for sql  version 改成你要降级的那个版本 也就是sql2008.确定完成即可。会生成一个script.sql
脚本文件。

 

3、下一步要把sqlserver2012源文件复制到另外一个电脑上。由于SqlServer正在运行 是无法复制的。所以首先要停止sqlserver服务。
如何把高版本的sqlserver <wbr>还原到低版本的 <wbr>sqlserver?

4、找到你这个sql2012数据库在电脑中的位置。 右键这个数据库-文件 会有路径,复制出这两个文件来。 至此 sqlserver2012的电脑操作完成
    如何把高版本的sqlserver <wbr>还原到低版本的 <wbr>sqlserver?
 
 
 
5、把上面得到的script.sql 文件和两个数据源文件复制到sql2008所在的电脑中。在sql2008中  新建-查询管理器。把script.sql拖进去,会看到代码。
如何把高版本的sqlserver <wbr>还原到低版本的 <wbr>sqlserver?

     注意绿色部分。此时显示的数据库文件位置是sql2012电脑的位置。我们需要把这两个地址改为 sql2008R2 中 你复制过来的那两个源文件的地址即可。运行F5执行  成功。