Hi,请  登录  或  注册

SQL2017 高版本迁移到 SQL2014 低版本图文教程

在实际运维中,经常会遇到这样的情况:客户给你一份 SQL Server 2017 的数据库备份文件(.bak),而你的服务器上只有 SQL Server 2014。直接在 2014 上还原,就会提示“备份来自更高版本的服务器,无法还原”,如下图所示。

在 SQL2014 上直接还原 2017 备份时报错界面
SQL2017 高版本迁移到 SQL2014 低版本图文教程

错误的大意就是:该备份是在 14.0.xxx(SQL2017)上生成的,而当前服务器是 12.0.xxx(SQL2014),版本不兼容。

下面用一套完整流程,教你如何把 2017 的数据库迁移到 2014。

一、整体思路

  1. 在高版本 SQL2017 上先把 .bak 正常还原成数据库。
  2. 在 SQL2017 中,对这个数据库执行“生成脚本”,导出:
    • 数据库结构(表、视图、存储过程等)
    • 表中的数据
      并且把目标版本设置为 SQL Server 2014。
  3. 把生成好的 .sql 脚本复制到 SQL2014 服务器上执行。
  4. 执行完成后,就相当于在 2014 上重建了一套结构和数据,实现高版本向低版本迁移。

二、在 SQL2017 上还原原始备份

这一步比较简单,直接在 SQL2017 服务器上:

  1. 右键“数据库” → 选择“还原数据库”。
  2. 选择你的 .bak 文件,正常还原即可。
  3. 还原成功后,假设数据库名为:RYAccountsDB

这一步就不展开了,就是普通的还原操作。

三、在 SQL2017 中生成脚本(结构 + 数据)

  1. 在对象资源管理器中找到刚刚还原好的数据库,例如:RYPlatformDBRYAccountsDB
  2. 右键数据库 →“任务”→“生成脚本”。

右键数据库 → 任务 → 生成脚本SQL2017 高版本迁移到 SQL2014 低版本图文教程

  1. 在“选择对象”这一步,建议选择“选择特定数据库对象”,然后勾选需要迁移的表、视图、存储过程等对象。
    一般来说,只迁移业务相关的对象即可,系统库、系统表不要乱勾。

选择特定数据库对象,勾选需要迁移的表
SQL2017 高版本迁移到 SQL2014 低版本图文教程

说明:
“脚本整个数据库及所有数据库对象”虽然看起来省事,但实际测试容易报错(尤其是带一些不兼容特性的对象时),所以更推荐只勾选业务需要的对象。

四、设置脚本选项(关键步骤)

  1. 在“设置脚本编写选项”页面,先选择脚本保存位置,建议保存到桌面一个单独的 .sql 文件。
  2. 然后点击右下角的“高级”按钮,打开“高级脚本编写选项”。

高级脚本编写选项
SQL2017 高版本迁移到 SQL2014 低版本图文教程

在“高级脚本编写选项”里,重点检查并设置以下几项:

  1. “要脚本的数据类型”设置为:
    • “架构和数据”(即 Schema and Data)
      这样生成的脚本里既有建表语句,又有插入数据的语句。
  2. “脚本用于服务器版本”设置为:
    • SQL Server 2014
      这是实现高版本降到低版本的关键,不要保持默认的 2017。
  3. “脚本 DROP 和 CREATE”可以根据需要选择:
    • 如果目标库是空库,可以选择“仅 CREATE”;
    • 如果想确保覆盖,选择“在每个对象前生成 DROP”也可以,一般选择“脚本 DROP 和 CREATE”更保险。

确认这些选项都设置好之后,点“确定”,返回上一层,再点“下一步”。

五、生成脚本并保存

  1. 向导最后会有一个“摘要”页面,确认无误后点击“下一步”,开始真正生成脚本。
  2. 等进度条走完,所有对象前面都是绿色对勾,说明脚本生成成功。

SQL2017 高版本迁移到 SQL2014 低版本图文教程脚本生成进度,所有对象成功

  1. 在你刚才选择的保存路径下,就能看到生成好的 .sql 文件。例如下图桌面上的脚本文件图标。

SQL2017 高版本迁移到 SQL2014 低版本图文教程脚本文件已生成并保存在桌面

到这里,高版本库的数据和结构就已经变成一份普通 SQL 脚本,可以给任何兼容 T-SQL 的版本执行了。

六、在 SQL2014 服务器上执行脚本

  1. 把刚才生成的 .sql 文件复制到 SQL2014 服务器。
  2. 打开 SQL Server Management Studio(2014),连接到目标实例。
  3. 如果还没有同名数据库,可以先手动新建一个空数据库,也可以直接执行脚本让它自动创建(具体看脚本里是否包含 CREATE DATABASE 语句)。
  4. 在 SSMS 中打开这个 .sql 脚本,选择目标数据库,点击“执行”。

可能会出现一次执行报错、第二次执行成功的情况(比如先创建数据库、再创建表、再插数据等过程),遇到这种情况可以:

  • 根据报错信息,确认是不是数据库刚刚创建还未完全刷新;
  • 关闭 SSMS 再重新打开一次,重新连接后再执行脚本;
  • 或者出错后修正一下脚本,再重新执行。

说明:
如果执行时提示“数据库不存在”,一般是脚本里有 USE xxx 这类语句,而当前服务器上还没有同名数据库。解决方式:

  1. 先手动新建一个同名空数据库,再执行脚本;
  2. 或者把脚本里 CREATE DATABASE + USE 相关部分保留,优先执行这一段,让系统先创建数据库。

七、一些常见小问题说明

  1. 如果数据库里有非常大的表,生成脚本时脚本文件会很大,执行时间也比较长,这是正常现象。
  2. 如果有 Job、登录名、权限等服务器级对象,这一套“生成脚本”不会全部覆盖,需要单独处理(比如再脚本化登录名、作业等)。
  3. 如果中途执行报错,不要慌,先记录下错误信息,逐条处理。很多时候是个别对象不兼容,或者依赖顺序问题,修正后再执行即可。

这样一套流程走完,就相当于把 SQL2017 上的数据库完整“降级”到 SQL2014 了:
先在高版本正常还原,再通过“生成脚本”导出结构和数据,最后在低版本执行脚本完成迁移。

 

文章名称:SQL2017 高版本迁移到 SQL2014 低版本图文教程
除非特别注明,本站所有文章均为原创,转载请注明出处:264玫瑰资源库
部分教程资源来源于互联网,请谨慎辨别广告内容,避免上当受骗!

评论 抢沙发

登录

找回密码

注册