如何将高版本SQL Server数据库备份文件恢复到低版本SQL Server?
使用SQL Server 2008 R2(10.50.1600),我做了一个备份文件,现在我想在我的live服务器的SQL Server 2008(10.00.1600)上恢复它。
当我试图将备份恢复到SQL Server 2008上时,它给出了一个错误,即恢复失败,因为:
数据库备份在运行版本为10.50.1600的服务器上。
该版本与正在运行的服务器不兼容
10.00.1600.
如何恢复该服务器上的备份文件?
这并不漂亮,但这就是我如何做到的,前提是你在SQL 2008 R2安装上安装了这个选项。
1)右键单击SQL Server 2008 R2“任务”中的数据库。在向导中“生成脚本”,第一步选择整个数据库和对象。在“设置脚本选项”步骤,你应该看到一个按钮“高级”,选择这个,并确保你选择的“脚本服务器版本”= SQL Server 2008”而不是R2版本。
这是至关重要的一步,因为“导入数据”本身并不会带来所有的主键、约束条件和任何其他对象,如存储过程。”
2)使用查询窗口运行在新的安装实例或数据库实例SQL Express或SQL Server 2008上生成的SQL脚本,或者打开已保存的. SQL脚本并执行,可以看到新的数据库。
3)现在右键点击新的数据库,选择“任务”..“Import Data..”选择源数据库作为R2数据库,目标数据库作为新数据库。“从一个或多个表或视图复制数据”,选中顶部复选框以选择所有表,然后下一步,运行包,您应该在旧版本上拥有所有内容。这应该也适用于回到2005年的版本。希望这能帮助到一些人。
不一定会起作用
备份/恢复-当目标是较早的MS SQL版本时将不起作用。
复制数据库-当目标是SQL Server Express时将不起作用:“目标服务器不能是SQL Server 2005或更高版本的Express实例。”
数据导入——不会复制模式。
将工作
Script generation - Tasks -> Generate Scripts. Make sure you set the desired target SQL Server version on the Set Scripting Options -> Advanced page. You can also choose there whether to copy schema, data, or both. Note that in the generated script, you may need to change the DATA folder for the mdf/ldf files if moving from non-express to express or vice versa.
Microsoft SQL Server Database Publishing Services - comes with SQL Server 2005 and above, I think. Download the latest version from here. Prerequisites: sqlncli.msi/sqlncli_x64.msi/sqlncli_ia64.msi, SQLServer2005_XMO.msi/SQLServer2005_XMO_x64.msi/SQLServer2005_XMO_ia64.msi (download here).
以下是我对完成这个任务的不同选择的2点看法:
第三方工具:完成这项工作最简单的方法可能是在低版本上创建一个空数据库,然后使用第三方工具读取备份,并将新创建的数据库与备份同步。
红门是最受欢迎的之一,但还有许多其他像ApexSQL Diff, ApexSQL数据Diff, Adept SQL, Idera ....所有这些都是高级工具,但你可以在试用模式下完成工作;)
生成脚本:正如其他人已经提到的,您总是可以使用SSMS编写脚本结构和数据,但您需要考虑到执行的顺序。默认情况下,对象脚本的顺序是不正确的,您必须注意依赖关系。如果数据库很大并且有很多对象,这可能是一个问题。
导入和导出向导:这不是一个理想的解决方案,因为它不会恢复所有对象,而只恢复数据表,但当需要时,您可以考虑使用它进行快速和肮脏的修复。