如何将更高版本的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。
如何在此服务器上恢复此备份文件?
答案 0 :(得分:69)
不,无法降级数据库。 10.50.1600是SQL Server 2008 R2 版本。绝对没有办法将此数据库还原或附加到您尝试还原的SQL Server 2008实例(10.00.1600是SQL Server 2008)。您唯一的选择是:
答案 1 :(得分:47)
您可以使用名为导出数据层应用程序的功能,该功能会生成包含数据库架构和数据的.bacpac
文件。
在目标服务器上,您可以使用导入数据层应用程序选项,从预先创建的.bacpac
文件中创建并填充新数据库
如果您只想传输数据库架构,可以使用提取数据层应用程序来创建文件,使用部署数据层应用程序来部署已创建的数据库架构。< / p>
我已经在不同版本的SQL Server上尝试过这个过程,从SQL 2014到SQL 2012,从SQL 2014到SQL 2008R2,并且运行良好。
答案 2 :(得分:31)
不一定有效
备份/恢复 - 当目标是早期的MS SQL版本时无效。
复制数据库 - 当目标是SQL Server Express时无效:"The destination server cannot be a SQL Server 2005 or later Express instance."
数据导入 - 不会复制架构。
可行吗
脚本生成 - 任务 - &gt; 生成脚本。确保在设置脚本选项 - &gt;上设置所需的目标SQL Server版本。 高级页面。您也可以选择是否复制架构,数据或两者。请注意,在生成的脚本中,如果从非快递移动到快递,则可能需要更改mdf / ldf文件的DATA文件夹,反之亦然。
Microsoft SQL Server数据库发布服务 - 我认为SQL Server 2005及更高版本附带。从here下载最新版本。先决条件:sqlncli.msi
/ sqlncli_x64.msi
/ sqlncli_ia64.msi
,SQLServer2005_XMO.msi
/ SQLServer2005_XMO_x64.msi
/ SQLServer2005_XMO_ia64.msi
(下载here)。
答案 3 :(得分:28)
以下是完成此操作的不同选项的2美分:
第三方工具:完成工作的最简单方法可能是在较低版本上创建一个空数据库,然后使用第三方工具读取备份并将新创建的新数据库与备份
红门是最受欢迎的门之一,但还有许多其他广告,例如ApexSQL Diff,ApexSQL Data Diff,Adept SQL,Idera ....所有这些都是高级工具,但您可以在试用模式下完成工作;)
生成脚本:正如其他人已经提到的那样,您始终可以使用SSMS编写脚本结构和数据,但您需要考虑执行的顺序。默认情况下,对象脚本没有正确排序,您必须处理依赖项。如果数据库很大并且有很多对象,这可能是一个问题。
导入和导出向导:这不是理想的解决方案,因为它不会还原所有对象而只会恢复数据表,但您可以在需要时将其视为快速和脏修复。
答案 4 :(得分:23)
您无法将在较高版本中创建的数据库(或附加)还原为较低版本。唯一的方法是为所有对象创建一个脚本,并使用该脚本生成数据库。
选择&#34;架构和数据&#34; - 如果你想同时选择 备份脚本文件中的内容
选择仅架构 - 如果只需要架构。
是的,现在您已经完成了使用架构和数据库数据创建脚本。
答案 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)
你可以试试这个。
答案 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中的“导入/导出”向导来迁移所有内容
使用备份/还原或分离/附加不可能“降级”。因此,您要做的是:
答案 12 :(得分:-1)