将数据库从 SQL Server 2012 移动到 2008

Ric*_*ich 29 sql-server sql-server-2008 sql-server-2012

我在 SQL Sever 2012 实例上有一个数据库,我想将其复制到 2008 服务器。2008 服务器无法恢复 2012 服务器创建的备份(我试过)。

我在 2012 年找不到任何选项来创建 2008 兼容的备份。我错过了什么吗?

有没有一种简单的方法可以将架构和数据导出为与版本无关的格式,然后我可以将其导入到 2008 中?

该数据库不使用任何 2012 特定功能。它包含表、数据和存储过程。

这是我迄今为止尝试过的

我在 2012 服务器上尝试了TasksGenerate Scripts,并且能够将架构(包括存储过程)生成为 SQL 脚本。不过,这不包括任何数据。

在我的 2008 机器上创建该架构后,我能够在 2012 机器上打开“导出数据”向导,在将 2012 配置为源机器并将 2008 配置为目标机器后,我看到了一个表列表,我可以复制。我选择了我所有的表(300+),然后点击向导。不幸的是,它花费了很长时间来生成脚本,然后失败并出现诸如“插入只读列‘FOO_ID’失败”之类的错误。

我还尝试了“复制数据库向导”,它声称可以“从 2000 或更高版本复制到 2005 或更高版本”。它有两种模式:

  1. “分离并附加”,失败并出现错误:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
    Run Code Online (Sandbox Code Playgroud)
  2. 因错误而失败的 SQL 管理对象方法

    无法读取属性 IsFileStream。此属性在 SQL Server 7.0 上不可用。”

Ric*_*ich 40

在 2012 SQL Management Studio 中右键单击数据库,然后选择“任务 -> 生成脚本”。点击欢迎屏幕,选择“脚本整个数据库和所有数据库对象”。在“指定应如何保存脚本”页面上,单击“高级”。在弹出的属性页面的“General”下,将“Types of data to script”从“Schema only”改为“Schema and data”,将“Script for Server Version”从“2012”改为“2008”。

然后,我必须找到某种方法来编辑这个庞大的 SQL 文件的开头,以调整数据库的创建方式——请参阅此 q:https : //stackoverflow.com/questions/102829/best-free-text-editor -支持超过 4GB 的文件

最后,我必须找到某种方法来运行 SQL 脚本,该脚本太大而无法在 SQL Management Studio 中打开 - 请参阅此问题:https : //stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file

  • @JonoRR 您很可能希望编辑 CREATE DATABASE 语句并将数据文件路径设置为目标服务器上有意义的任何路径。 (3认同)

小智 12

对于 SQL 迁移,请使用免费的开源 SQL 数据库迁移向导。

我有一个 5GB 的数据库,其中包含大约 1000 万条记录,并通过生成脚本尝试了该路由,然后使用 sqlcmd.exe 运行它。首先,生成的脚本并不总是正常工作。其次,sqlcmd.exe 也可能在处理大文件时失败,抱怨可用内存。osql.exe 可以工作,但需要很长时间(并且具有相同的命令行参数)。

然后我遇到了一个很棒的工具,可以将 SQL Server 迁移到 SQL Azure 数据库。这也适用于 SQL Server 到 SQL Server,例如,如果您想将 SQL 2012 数据库迁移到 2008 R2。它使用 bcp.exe,它使用大容量复制。有可用的 GUI 和命令行(批处理)版本,并且它是开源的。请参阅http://sqlazuremw.codeplex.com/。就我而言,手术耗时 16 分钟。

在高级屏幕中,您可以选择目标是 SQL Server,而不是 SQL Azure。