SQL Server数据库备份在较低版本上恢复

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

使用SQL Server 2008 R2(10.50.1600),我从这个服务器版本创build了一个备份文件,现在我想在我的实时服务器的SQL Server 2008(10.00.1600)上恢复它。 在那个时候,当我在SQL Server 2008上恢复时,它给出了一个错误,即Restore Failed因为:

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

如何在这台服务器上恢复这个备份文件?

不,降级数据库是不可能的。 10.50.1600是SQL Server 2008 R2版本。 您绝对没有办法将此数据库还原或附加到您尝试还原的SQL Server 2008实例(10.00.1600是SQL Server 2008)。 你唯一的select是:

  • 将此实例升级到SQL Server 2008 R2
  • 还原SQL Server 2008 R2实例上的备份,导出所有数据并将其导入SQL Server 2008数据库。

这是我的2美分完成这个不同的选项:

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

红门是最stream行的,但也有许多其他像ApexSQL差异 , ApexSQL数据差异 , Adept SQL , Idera …。 所有这些都是高级工具,但您可以在试用模式下完成工作;)

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

导入和导出向导 :这不是一个理想的解决scheme,因为它不会恢复所有的对象,而只能恢复数据表,但是当需要的时候,你可以把它看成是快速和脏的修复。

不一定会工作

  • 备份/恢复 – 当目标是较早的MS SQL版本时不起作用。

  • 复制数据库 – 在目标是SQL Server Express时不起作用: “目标服务器不能是SQL Server 2005或更高版本的Express实例。

  • 数据导入 – 不会复制架构。

将工作

  • 脚本生成任务 – > 生成脚本 。 确保在“ 设置脚本选项” – >“ 高级”页面上设置所需的目标SQL Server版本。 您也可以select是复制模式,数据还是两者。 请注意,在生成的脚本中,如果从非expression式转换为expression式,或者反之亦然,则可能需要更改mdf / ldf文件的DATA文件夹。

  • Microsoft SQL Server数据库发布服务 – 自带SQL Server 2005及更高版本,我想。 从这里下载最新版本。 先决条件: sqlncli.msi / sqlncli_x64.msi / sqlncli_ia64.msiSQLServer2005_XMO.msi / SQLServer2005_XMO_x64.msi / SQLServer2005_XMO_ia64.msi ( 在此下载)。

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

在这里输入图像说明

select“Schema and Data”模式和数据)如果你想把这两个东西都带入备份脚本文件
selectSchema Only如果只需要schema。

在这里输入图像说明

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

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

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

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

您可以使用名为“ 导出数据层应用程序”的function来生成包含数据库模式和数据的.bacpac文件。

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

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

我已经尝试了从SQL 2014到SQL 2012的不同版本的SQL Server以及从SQL 2014到SQL 2008R2的此过程,并且运行良好。

你可以试试这个

  1. 在SQL Server 2008上创build一个数据库。
  2. 使用从SQL Server R2(或更高版本)导入数据function导入数据。
  3. 使用“RedGate SQLCompare”来同步脚本。

这不是很好,但是我这样做是因为你已经在SQL 2008 R2上安装了这个选项。

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

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

3)现在右键单击新数据库并select“任务”。“导入数据”select源为R2数据库,目标为新数据库。 “从一个或多个表或视图复制数据”,select顶部的checkbox来select所有表,然后下一步,运行包,你应该有一个旧版本的一切。 这也应该回到2005年的版本。 希望这可以帮助别人。

任务 – >生成脚本…在“脚本数据types”中的高级select“Shema和数据”然后尝试在较低版本中运行此脚本

我很欣赏这是一个旧的post,但是对于人们来说,知道Azure迁移向导(在Codeplex上可用 – 无法链接到Codeplex正在input此内容)可能会很方便。

你可以使用BCP进出小桌子。

BCP OUT命令: –

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

BCP IN命令: – 为Invoicescopy1创build表结构。

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