较低版本的SQL Server数据库备份还原

时间:2011-05-31 04:55:42

标签: 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。

如何在此服务器上恢复此备份文件?

13 个答案:

答案 0 :(得分:69)

不,无法降级数据库。 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 :(得分:47)

您可以使用名为导出数据层应用程序的功能,该功能会生成包含数据库架构和数据的.bacpac文件。

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

如果您只想传输数据库架构,可以使用提取数据层应用程序来创建文件,使用部署数据层应用程序来部署已创建的数据库架构。< / p>

我已经在不同版本的SQL Server上尝试过这个过程,从SQL 2014到SQL 2012,从SQL 2014到SQL 2008R2,并且运行良好。

答案 2 :(得分:31)

不一定有效

可行吗

  • 脚本生成 - 任务 - &gt; 生成脚本。确保在设置脚本选项 - &gt;上设置所需的目标SQL Server版本。 高级页面。您也可以选择是否复制架构,数据或两者。请注意,在生成的脚本中,如果从非快递移动到快递,则可能需要更改mdf / ldf文件的DATA文件夹,反之亦然。

  • Microsoft SQL Server数据库发布服务 - 我认为SQL Server 2005及更高版本附带。从here下载最新版本。先决条件:sqlncli.msi / sqlncli_x64.msi / sqlncli_ia64.msiSQLServer2005_XMO.msi / SQLServer2005_XMO_x64.msi / SQLServer2005_XMO_ia64.msi(下载here)。

答案 3 :(得分:28)

以下是完成此操作的不同选项的2美分:

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

红门是最受欢迎的门之一,但还有许多其他广告,例如ApexSQL DiffApexSQL Data DiffAdept SQLIdera ....所有这些都是高级工具,但您可以在试用模式下完成工作;)

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

导入和导出向导:这不是理想的解决方案,因为它不会还原所有对象而只会恢复数据表,但您可以在需要时将其视为快速和脏修复。

答案 4 :(得分:23)

您无法将在较高版本中创建的数据库(或附加)还原为较低版本。唯一的方法是为所有对象创建一个脚本,并使用该脚本生成数据库。

enter image description here

  

选择&#34;架构和数据&#34; - 如果你想同时选择   备份脚本文件中的内容
选择仅架构 -   如果只需要架构。

enter image description here

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

答案 5 :(得分:14)

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

通过右键单击源数据库&gt;进行查找“任务”&gt; “复制数据库”。

您可以将数据库复制到较低版本的SQL Server实例。这对我来说从SQL Server 2008 R2(SP1) - 10.50.2789.0到Microsoft SQL Server 2008(SP2) - 10.0.3798.0

答案 6 :(得分:6)

你可以试试这个。

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

答案 7 :(得分:4)

它并不漂亮,但这就是我在你的SQL 2008 R2安装上安装了这个选项的方式。

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

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

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

答案 8 :(得分:2)

任务 - &gt;生成脚本...... 在高级中&#34;脚本的数据类型&#34;选择&#34; Shema和数据&#34; 并尝试在较低版本中运行此脚本

答案 9 :(得分:1)

你可以在小桌子上使用BCP。

BCP OUT命令: -

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

BCP IN命令: - 为Invoicescopy1创建表结构。

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

答案 10 :(得分:0)

我很欣赏这是一篇旧帖子,但是对于人们来说,了解Azure迁移向导(Codeplex上可用 - 无法链接到的,就像Codeplex是在我打字的那一刻)可能会有用。这将很容易做到。

答案 11 :(得分:0)

您必须使用SSMS中的“导入/导出”向导来迁移所有内容

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

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

答案 12 :(得分:-1)

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

详细参考

How to migrate a SQL Server database to a lower version