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.msi
,SQLServer2005_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的此过程,并且运行良好。
你可以试试这个
- 在SQL Server 2008上创build一个数据库。
- 使用从SQL Server R2(或更高版本)导入数据function导入数据。
- 使用“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