[英]Backup and Restore SQL Server database from higher version to lower version
[英]SQL Server database backup restore on lower version
如何将高版本SQL服务器数据库备份文件恢复到低版本SQL服务器上?
使用 SQL Server 2008 R2 (10.50.1600) ,我制作了一个备份文件,现在我想在我的实时服务器的 SQL Server 2008 (10.00.1600)上恢复它。
当我尝试将备份还原到 SQL Server 2008 上时,它给出了一个错误,即Restore Failed
,因为:
数据库备份在运行版本 10.50.1600 的服务器上。 该版本与运行版本 10.00.1600 的此服务器不兼容。
如何恢复此服务器上的备份文件?
您可以使用名为Export Data-Tier Application 的功能,该功能会生成包含数据库架构和数据的.bacpac
文件。
在目标服务器上,您可以使用导入数据层应用程序选项,该选项从预先创建的.bacpac
文件创建和填充新数据库
如果您只想传输数据库模式,您可以使用提取数据层应用程序创建文件和部署数据层应用程序部署创建的数据库模式。
I've tried this process on different versions of SQL Server from SQL 2014 to SQL 2012 and from SQL 2014 to SQL 2008R2 and worked well.
不,不可能降级数据库。 10.50.1600 是 SQL 服务器 2008 R2版本。 您绝对无法将此数据库还原或附加到您尝试还原的 SQL Server 2008 实例(10.00.1600 是 SQL Server 2008)。 您唯一的选择是:
不一定有效
备份/恢复- 当目标是较早的 MS SQL 版本时将不起作用。
复制数据库- 当目标是 SQL Server Express 时将不起作用: “目标服务器不能是 SQL Server 2005 或更高版本的 Express 实例。”
数据导入- 不会复制架构。
将工作
脚本生成-任务->生成脚本。 确保在Set Scripting Options -> Advanced页面上设置了所需的目标 SQL 服务器版本。 您还可以在此处选择是复制模式、数据还是两者都复制。 请注意,在生成的脚本中,如果从 non-express 移动到 express,您可能需要更改 mdf/ldf 文件的 DATA 文件夹,反之亦然。
我认为Microsoft SQL 服务器数据库发布服务- 随附 SQL Server 2005 及更高版本。 从这里下载最新版本。 先决条件: sqlncli.msi
/ sqlncli_x64.msi
/ sqlncli_ia64.msi
, SQLServer2005_XMO.msi
/ SQLServer2005_XMO_x64.msi
/ SQLServer2005_XMO_ia64.msi
( 在此处下载)。
这是我完成此任务的不同选项的 2 美分:
第三方工具:完成工作的最简单方法可能是在较低版本上创建一个空数据库,然后使用第三方工具读取备份并将新创建的数据库与备份同步。
红门是最受欢迎的门之一,但还有许多其他门,例如ApexSQL Diff 、 ApexSQL Data Diff 、 Adept SQL 、 Idera ...。 所有这些都是高级工具,但您可以在试用模式下完成工作;)
生成脚本:正如其他人已经提到的,您始终可以使用 SSMS 编写结构和数据的脚本,但您需要考虑执行顺序。 默认情况下 object 脚本的顺序不正确,您必须注意依赖关系。 如果数据库很大并且有很多对象,这可能是一个问题。
导入和导出向导:这不是一个理想的解决方案,因为它不会恢复所有对象,而只会恢复数据表,但您可以在需要时考虑使用它进行快速和肮脏的修复。
另一种方法是使用“复制数据库”功能:
通过右键单击源数据库>“任务”>“复制数据库”进行查找。
您可以将数据库复制到较低版本的 SQL 服务器实例。 这对我有用,从 SQL Server 2008 R2 (SP1) - 10.50.2789.0 到 Microsoft SQL Server 2008 (SP2) - 10.0.3798.0
你可以试试这个。
Go 到Task->Generate Scripts ...
在“脚本的数据类型” select "Schema and data"
中的高级中,并尝试在较低版本中运行此脚本。
这并不漂亮,但这就是我这样做的方式,因为您已在 SQL 2008 R2 安装上安装了此选项。
1)右键单击SQL Server 2008 R2“任务”中的数据库..向导中的“生成脚本”,select第一步中的整个数据库和对象。 On the "Set Scripting Options" step you should see a button "Advanced", select this and make sure you select "Script for Server Version" = SQL Server 2008" not R2 version. This is a crucial step, because "import data"它本身并不会带来所有的主键、约束和任何其他对象,如存储过程。”
2) Run the SQL script generated on the new install or database instance SQL Express or SQL Server 2008 using the query window or open saved.sql script and execute and you should see the new database.
3) 现在右键单击新数据库和 select“任务”..“导入数据..”选择源作为 R2 数据库和目标作为新数据库。 “从一个或多个表或视图复制数据”,select 顶部复选框到 select 所有表,然后下一步,在旧版本上运行 package,您应该有。 这也适用于回到 2005 版本。 希望这可以帮助某人。
您可以在小桌子上使用 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
我很欣赏这是一篇旧帖子,但它可能对人们了解 Azure 迁移向导(在 Codeplex 上可用 - 无法链接到,因为 Codeplex 在我输入这个的那一刻)会很容易做到这一点。
您必须使用 SSMS 中的导入/导出向导来迁移所有内容
使用备份/恢复或分离/附加不可能“降级”。 因此,您要做的是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.