一、适用场景
源端数据库是SQL Server 2005 及以上。(SQL Server 2000未测试。)
数据文件总大小在10G以内。
可以在低峰期停应用。
二、导出步骤
1、软件准备
如果源端SQL Server版本低于2008,则下载一个2008的客户端工具,在任意一台机器上安装。
下载Microsoft® SQL Server® 2008 Management Studio
安装,忽略各种提示,都选默认选项。
2、运行SQL Server 2008 Management Studio,连接到源数据库。
3、导出目标数据库的生成脚本
弹出“脚本向导”的对话框,按提示选择下一步
选择数据库
不要勾选“为所选数据库中的有所对象编写脚本”
选择脚本选项,设置“编写数据的脚本”为TRUE,其他选项根据实际需要修改。下图是建议值。简单起见除了创建数据库的脚本,登录脚本,编写统计信息,生成依赖对象脚本这几项一定要设置为FALSE,其他都可以设置为TRUE。
选择对象类型,注意不要选“用户和数据库角色”
选择存储过程(如果没有,就直接跳过)
选择表,不用迁移的表就不要选了
选择视图,如果没有就跳过
选择输出选项,可以选择导出到一个文件,也可以选择每个对象导出一个文件。数据量非常大的情况下建议每个对象导出一个文件。
最终确认
等待导出,数据量大的情况下,时间会比较久。
4、新建到RDS数据库的连接,打开查询分析器,执行上面导出的脚本。
如果脚本文件比较大,建议前面针对每个对象导出一份文件。
也可以不打开脚本进行执行,利用SQLCMD模式。
在目标RDS数据库上打开一个查询分析器,然后点击菜单“查询”,选择“SQLCMD模式”
然后在查询分析器里执行
执行OS命令是前面加上两个感叹号,后面跟上windows cmd命令
执行sql文件
:r d:\test\script20120605.sql
当文件很大的时候(如1G以上),如果云服务器内存不大,很有可能会报 “OufOfMemory Exception”。这个时候就换个方法调用sqlcmd。
在windows的命令行下(开始->运行,输入:cmd
Sqlcmd –S “xxx.sqlserver.rds.aliyuncs.com,3433” -U 用户名 -P 密码 -d 数据库名 -i SQL文件路径 -o 输出日志名
5. 验证数据(略)
三、可能遇到的问题:
1、 如果导出脚本里有乱码,请检查导出文件是否是Unicode格式
2、如果导入新库后查询有乱码,请检查新库和老库的服务器排序规则是否一致。
3、大表的导入慢问题。
当表的数据量非常大的时候,如超过百万。上面的导入效率可能非常的低。这时候可以用bcp命令来导数据。方法如下:
1) 在源库主机上或者云服务器上用bcp命令导出源库数据。
Bcp test.dbo.adminInfo out d:\tt\admininfo.out -T -S AY120724113142a -c
2) 用前面SQLServer导出脚本在目标RDS 数据库中建好表,但是不要建索引和主键、外键约束。
3)用bcp导入数据
bcp yundns8885.dbo.admininfo in d:\tt\admininfo.out –U yundns8885 –P xxxxxxxx -S "sp500xxxxxxx.sqlserver.rds.aliyuncs.com,3433" –c –E –b 1000
4)在RDS数据库上的表上加索引和主键、外键等。