如何将高版本SQL Server数据库备份文件恢复到低版本SQL Server?

使用SQL Server 2008 R2(10.50.1600),我做了一个备份文件,现在我想在我的live服务器的SQL Server 2008(10.00.1600)上恢复它。

当我试图将备份恢复到SQL Server 2008上时,它给出了一个错误,即恢复失败,因为:

数据库备份在运行版本为10.50.1600的服务器上。 该版本与正在运行的服务器不兼容 10.00.1600.

如何恢复该服务器上的备份文件?


当前回答

以下是我对完成这个任务的不同选择的2点看法:

第三方工具:完成这项工作最简单的方法可能是在低版本上创建一个空数据库,然后使用第三方工具读取备份,并将新创建的数据库与备份同步。

红门是最受欢迎的之一,但还有许多其他像ApexSQL Diff, ApexSQL数据Diff, Adept SQL, Idera ....所有这些都是高级工具,但你可以在试用模式下完成工作;)

生成脚本:正如其他人已经提到的,您总是可以使用SSMS编写脚本结构和数据,但您需要考虑到执行的顺序。默认情况下,对象脚本的顺序是不正确的,您必须注意依赖关系。如果数据库很大并且有很多对象,这可能是一个问题。

导入和导出向导:这不是一个理想的解决方案,因为它不会恢复所有对象,而只恢复数据表,但当需要时,您可以考虑使用它进行快速和肮脏的修复。

其他回答

我知道这是一篇老文章,但它可能对人们有用,让他们知道Azure迁移向导(在Codeplex上可用-不能链接到Codeplex,因为我正在输入这篇文章)可以很容易地做到这一点。

您可以使用名为Export data - tier Application的功能,它可以生成包含数据库模式和数据的.bacpac文件。

在目标服务器上,您可以使用Import Data-Tier Application选项,该选项可以从预先创建的.bacpac文件创建并填充新数据库

如果只想传输数据库模式,可以使用Extract Data-Tier Application创建文件,使用Deploy Data-Tier Application部署创建的数据库模式。

我在不同版本的SQL Server上尝试了这个过程,从SQL 2014到SQL 2012,从SQL 2014到SQL 2008R2,效果很好。

不,不能降级数据库。其中“10.50.1600”为SQL Server 2008 R2版本。您绝对无法恢复或将此数据库附加到您试图恢复的SQL Server 2008实例(10.00.1600是SQL Server 2008)。你唯一的选择是:

将此实例升级到SQL Server 2008 R2或 恢复您在SQL Server 2008 R2实例上的备份,导出所有数据并导入SQL Server 2008数据库。

以下是我对完成这个任务的不同选择的2点看法:

第三方工具:完成这项工作最简单的方法可能是在低版本上创建一个空数据库,然后使用第三方工具读取备份,并将新创建的数据库与备份同步。

红门是最受欢迎的之一,但还有许多其他像ApexSQL Diff, ApexSQL数据Diff, Adept SQL, Idera ....所有这些都是高级工具,但你可以在试用模式下完成工作;)

生成脚本:正如其他人已经提到的,您总是可以使用SSMS编写脚本结构和数据,但您需要考虑到执行的顺序。默认情况下,对象脚本的顺序是不正确的,您必须注意依赖关系。如果数据库很大并且有很多对象,这可能是一个问题。

导入和导出向导:这不是一个理想的解决方案,因为它不会恢复所有对象,而只恢复数据表,但当需要时,您可以考虑使用它进行快速和肮脏的修复。

您必须使用SSMS中的Import/Export向导来迁移所有内容

使用备份/恢复或分离/附加不可能“降级”。因此,你要做的是:

从运行新SSMS/SQL版本的服务器备份数据库。 通过展开“Tasks”菜单(在右键单击目标数据库之后)并选择“Import data”选项,从生成的.bak文件导入数据。