繁体   English   中英

SQL 低版本服务器数据库备份恢复

[英]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)。 您唯一的选择是:

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

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

在此处输入图像描述

select “架构和数据” -如果你想把这两个东西都放到备份脚本文件中
select模式 -如果只需要模式。

在此处输入图像描述

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

不一定有效

将工作

  • 脚本生成-任务->生成脚本 确保在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 DiffApexSQL Data DiffAdept SQLIdera ...。 所有这些都是高级工具,但您可以在试用模式下完成工作;)

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

导入和导出向导:这不是一个理想的解决方案,因为它不会恢复所有对象,而只会恢复数据表,但您可以在需要时考虑使用它进行快速和肮脏的修复。

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

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

您可以将数据库复制到较低版本的 SQL 服务器实例。 这对我有用,从 SQL Server 2008 R2 (SP1) - 10.50.2789.0 到 Microsoft SQL Server 2008 (SP2) - 10.0.3798.0

你可以试试这个。

  1. 在 SQL Server 2008 上创建数据库。
  2. 使用导入数据功能从 SQL 服务器 R2(或任何更高版本)导入数据。
  3. 使用“RedGate SQLCompare”同步脚本。

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 中的导入/导出向导来迁移所有内容

使用备份/恢复或分离/附加不可能“降级”。 因此,您要做的是:

  1. 从运行新 SSMS/SQL 版本的服务器备份数据库。
  2. 从生成的.bak 文件中导入数据,方法是展开“任务”菜单(右键单击目标数据库后)并选择“导入数据”选项。

您可以从任务菜单生成脚本

详细参考

如何将 SQL 服务器数据库迁移到较低版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM