本地SQL Server表迁移至AWS RDS(SQL Server)的最简实现方案咨询
把本地SQL Server表复制到AWS RDS SQL Server的最简方案
我来给你梳理几个最简的实现方案,从易到难拆解,你可以按需选择:
方案1:链接服务器(最直接的一次性复制)
如果只是少量表的一次性复制,链接服务器绝对是最快的方式,不用额外工具,直接在SSMS里操作就行。
怎么创建链接服务器:
- 先确保网络连通:AWS RDS的安全组要允许你本地IP访问1433端口,本地防火墙也要放行这个端口。
- 打开本地SSMS,展开「服务器对象」→「链接服务器」,右键选择「新建链接服务器」。
- 常规选项卡:
- 链接服务器名称:随便起个好记的,比如
AWS_RDS_SQL - 服务器类型选「其他数据源」,数据源类型选「SQL Server」
- 产品名称填
SQL Server(可选,但填了更清晰) - 数据源填RDS的端点(比如
my-rds-instance.cxxxxxx.us-east-1.rds.amazonaws.com,1433)
- 链接服务器名称:随便起个好记的,比如
- 安全性选项卡:
- 选择「使用此安全上下文建立连接」,然后输入RDS的用户名和密码(就是你创建RDS时设置的有权限的账号)
- 点击确定后,右键这个链接服务器→「测试连接」,成功就可以用了。
复制表的操作:
- 如果目标表还没创建,直接新建并导入数据:
SELECT * INTO [AWS_RDS_SQL].[目标数据库名].[dbo].[目标表名] FROM [本地数据库名].[dbo].[源表名]
- 如果目标表已经存在,直接插入数据:
-- 如果有自增列,先开启身份插入 SET IDENTITY_INSERT [AWS_RDS_SQL].[目标数据库名].[dbo].[目标表名] ON; INSERT INTO [AWS_RDS_SQL].[目标数据库名].[dbo].[目标表名] SELECT * FROM [本地数据库名].[dbo].[源表名]; SET IDENTITY_INSERT [AWS_RDS_SQL].[目标数据库名].[dbo].[目标表名] OFF;
注意:如果表有外键、约束,可能需要先临时禁用,复制完再开启。
方案2:SSIS导入导出向导(适合多表/定时同步)
如果要复制很多表,或者之后需要定时同步,SSIS的导入导出向导是最省心的可视化方式,新手也能快速上手。
步骤:
- 打开本地SSMS,右键你要复制的本地数据库→「任务」→「导入数据」。
- 数据源选择「SQL Server Native Client 11.0」(对应你的SQL Server版本),服务器名填本地SQL服务器名,选择合适的身份验证方式。
- 目标同样选择「SQL Server Native Client 11.0」,服务器名填RDS的端点,身份验证选「SQL Server身份验证」,输入RDS的账号密码,选择目标数据库。
- 选择复制方式:选「复制一个或多个表或视图的数据」,然后勾选你要复制的表。
- 可以选择「立即执行」,也可以把这个流程保存为SSIS包,以后随时运行或者设置定时任务。
方案3:bcp命令行(适合超大表,速度最快)
如果你的表数据量特别大(比如几百万甚至几千万行),bcp命令的速度是最快的,因为是原生的批量复制工具。
步骤:
- 先把本地表导出到本地CSV文件:
bcp "SELECT * FROM [本地数据库名].[dbo].[源表名]" queryout "C:\temp\table_data.csv" -S 本地SQL服务器名 -U 本地账号 -P 本地密码 -c -t,
参数说明:-c表示用字符格式导出,-t,表示用逗号作为分隔符。
- 再把CSV文件导入到RDS:
bcp "[目标数据库名].[dbo].[目标表名]" in "C:\temp\table_data.csv" -S RDS端点 -U RDS账号 -P RDS密码 -c -t,
注意:导入前要先在RDS创建好和源表结构完全一致的表,否则会报错。
方案对比选哪个?
- 少量表一次性复制:优先选链接服务器的SELECT INTO,几行代码搞定,不用额外配置。
- 多表/需要定时同步:选SSIS导入导出向导,可视化操作,省心。
- 超大表:选bcp命令,速度最快。
内容的提问来源于stack exchange,提问作者marcia12
相关产品推荐
相关产品推荐

