SQL Server数据库备份恢复到低版本

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

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

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

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

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

453513 次浏览

不,不能降级数据库。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数据库。

你可以试试这个。

  1. 在SQL Server 2008上创建数据库。
  2. 使用Import Data特性从SQL Server R2(或更高版本)导入数据。
  3. 使用“RedGate SQLCompare”同步脚本。

这并不漂亮,但这就是我如何做到的,前提是你在SQL 2008 R2安装上安装了这个选项。

1)右键单击SQL Server 2008 R2“任务”中的数据库。在向导中“生成脚本”,第一步选择整个数据库和对象。在“设置脚本选项”步骤,你应该看到一个按钮“高级”,选择这个,并确保你选择的“脚本服务器版本”= SQL Server 2008”而不是R2版本。 这是至关重要的一步,因为“导入数据”本身并不会带来所有的主键、约束条件和任何其他对象,如存储过程。”< / p >

2)使用查询窗口运行在新的安装实例或数据库实例SQL Express或SQL Server 2008上生成的SQL脚本,或者打开已保存的. SQL脚本并执行,可以看到新的数据库。

3)现在右键点击新的数据库,选择“任务”..“Import Data..”选择源数据库作为R2数据库,目标数据库作为新数据库。“从一个或多个表或视图复制数据”,选中顶部复选框以选择所有表,然后下一步,运行包,您应该在旧版本上拥有所有内容。这应该也适用于回到2005年的版本。希望这能帮助到一些人。

另一种方法是使用“复制数据库”功能:

通过右键单击源数据库>“任务”>“复制数据库”找到。

您可以将数据库复制到低版本的SQL Server实例中。从SQL Server 2008 R2 (SP1) - 10.50.278.9到Microsoft SQL Server 2008 (SP2) - 10.0.3798.0,这对我来说都是有效的

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

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

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

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

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

任务- >生成脚本

先进的中的脚本的数据类型中选择"Schema and data",并尝试在您的低版本中运行此脚本。

你可以使用名为导出数据层应用程序的函数,它生成包含数据库模式和数据的.bacpac文件。

在目标服务器上,你可以使用导入数据层应用程序选项,它从预先创建的.bacpac文件创建并填充新数据库

如果你只想传输数据库模式,你可以使用提取数据层应用程序来创建文件,使用部署数据层应用程序来部署创建的数据库模式。

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

不能将在高版本中创建的数据库恢复(或附加)到低版本中。唯一的方法是为所有对象创建一个脚本,并使用该脚本生成数据库。

enter image description here

select “架构及数据” - 如果你想把两个 在备份脚本文件
select 模式只 - . .

enter image description here

是的,现在您已经完成了使用数据库的模式和数据创建脚本。

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

对于小表,可以使用BCP in和out。

BCP OUT命令:-

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

BCP IN命令:- 为Invoicescopy1创建表结构。< / p >

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c

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

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

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

您可以从任务菜单生成脚本

详细参考

如何将SQL Server数据库迁移到低版本