Brian F爱
从专注于角图,Web技术以yobet英雄联盟及波特兰的Node.js的Google开发人员专家中学习。
广告 ·ultimatecourses.com.
用终极课程学习角度正确的方式

在Amazon RDS中迁移数据库

亚马逊的关系数据库服务(RDS)使开发人员能够在Amazon管理的云中启动数据库实例。

这意味着开发人员可以更多地关注开发,并且对数据库,复制,容错和备份的微小升级更少。这一切都听起来很棒,但有一个小问题:没有文件系统访问。虽然这通常不是问题,但如果您尝试创建/还原SQL Server备份(.bak)文件,则确实成为一个问题。

RDS <> .BAK

不幸的是,没有访问我们的文件系统rds.实例意味着我们无法创建或导入.bak.文件。

那么,我们还有什么可做的?嗯,文件中概述了一个非常冗长的过程用于导入或导出SQL Server RDS实例的数据的解决方案

  • 拍摄源RDS实例的快照。
  • 禁用源RDS实例上的自动备份。
  • 通过禁用所有外部密钥约束和触发器来准备目标数据库。
  • 将登录导入目标数据库。
  • 使用SSMS中的生成和发布脚本向导创建架构DDL。
  • 在目标数据库上执行SQL命令以创建架构。
  • 使用SSM中的批量复制命令(BCP)或导入/导出向导将数据从源数据库迁移到目标数据库。
  • 通过重新启用外键约束和触发来清理目标数据库。
  • 重新启用源RDS实例上的自动备份。

经过这个过程是耗时和容易出错。值得庆幸的是,经过几次完成此过程后,我发现了一个更好的解决方案,不会在AWS文档中记录。

SQL Azure迁移向导

SQL Azure迁移向导使RDS实例中的数据库(或任何表/视图/存储过程迁移到RDS实例中的过程更加容易和更快的过程。虽然我们未使用Microsoft使用SQL Azure服务,但此工具非常适用于RDS实例上运行的SQL Server。

  • 在CodePlex上下载SQL Azure迁移向导
  • 提取并执行sqlazuremw.exe.文件。
  • 选择数据库在“Analyze / Migrate”选项下,选择SQL Server版本的源数据库,然后单击下一个
  • 输入源数据库服务器连接字符串和凭据,然后点击连接
  • 选择源数据库然后单击“下一步”。
  • 选择数据库对象(或全部)到脚本,单击“下一步”,“下一步”和“是”。
  • 然后,输入你的目标数据库连接字符串和凭据,然后单击“连接”。
  • 要么选择一个现有数据库作为目标,或创建一个新数据库,然后单击“下一步”。
  • 让它运行。

现在,虽然上面的步骤是相同的​​数字(巧合)的步骤,但相信我,SQL Azure迁移向导将为您节省大量时间(可能,小时)。要浏览此过程,我将展示使用SQL Azure迁移向导的视频,用于使用SQL Server复制数据进出RDS实例。

使用BCP时连接尝试失败

这可能不适用于您,但我想为那些可能运行融入同一问题的人员来注意到这一点。

尝试导入/导出一个大表时,您可能会遇到TCP连接错误时,在Windows EC2实例上运行SQL Server Management Studio并尝试使用批量副本命令或导入/导出时,我会遇到此问题巫师。我收到的连接错误:

SQLState = 08S01,NativeError = 10060 Error = [Microsoft] [SQL Server本机客户端11.0] TCP提供程序:连接尝试失败,因为在一段时间后连接方没有正确响应,或者已连接主机未能恢复已建立的连接失败响应。ERROR = [Microsoft] [SQL Server本机客户端11.0]通信链接失败错误= [Microsoft] [SQL Server本机客户端11.0] TDS流中的协议错误

迁移 - 数据库 - inauston-rds-error.png

屏幕截图显示命令提示符中的TCP错误

解决方案是禁用Citrix PV以太网适配器(NIC)上的TCP卸载。要在Windows EC2实例中执行此操作,您需要:

  • 启动>控制面板>网络和共享中心>更改适配器设置。
  • 右键单击Citrix虚拟网络适配器并选择属性
  • 点击一下配置网络适​​配器的按钮,然后选择高级标签。
  • 对于左侧列表中的每个属性,请将值设置为禁用使用右侧的选择列表。

当将大表从我的RDS实例导出时,这解决了所有TCP通信链路故障。

Brian F爱

嗨,我是布莱恩。我对类型名称,Angular和node.js感兴趣我嫁给了我最好的朋友邦妮,我住在波特兰和我滑雪(很多)。