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

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

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

我在 2012 中找不到任何选项来创建与 2008 兼容的备份。我是不是漏掉了什么?

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

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

这是我迄今为止尝试过的

我试过任务生成脚本在 2012 服务器上,我能够以 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()
    
  2. SQL 管理对象方法因错误而失败

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

答案1

在2012 SQL Management Studio中右键点击数据库,选择“任务 -> 生成脚本”,点击欢迎界面,选择“编写整个数据库和所有数据库对象的脚本”,在“指定脚本的保存方式”页面中点击“高级”,在弹出的属性页面中,在“常规”下,将“要编写脚本的数据类型”由“仅架构”改为“架构和数据”,将“适用于服务器版本的脚本”由“2012”改为“2008”。

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

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

答案2

对于 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。

答案3

我是 SQL 新手,但我设法从 2012 迁移到 2008。为此,我使用了 SQL 导入和导出实用程序。我选择了 SQL 2012 服务器和要迁移的数据库,最后选择了 2008 服务器,并创建了一个新数据库作为我的目标数据库。成功了。

答案4

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

问题是它无法插入 ID 列,因此:

  1. 勾选所有表格
  2. 选择所有表格(操作方法是单击第一个表格,然后按住 Shift 并单击最后一个表格)
  3. 单击“编辑映射” - 您可以看到它位于下一步按钮上方和预览旁边。
  4. 您将看到一个窗口,勾选“启用身份插入”,然后单击下一步并继续,这应该有效。对我来说有效。

相关内容