源数据库都是oracle 11,要求把数据导入到目标数据库SQL Server2008,测试单表迁移
操作笔记
1,
oracle中的tb_ori_0118 表数据导出逗号分隔的txt文件
2,
在sql server 数据库上创建表
3,
在sql server 数据库上生成导入数据文件所需的format文件
bcp mcdb..tb_ori_0118 format null -f c:\unload_data\tb_ori_0118.fmt -c -t, -T
bcp mcdb..tb_ori_0118 format null -f c:\unload_data\tb_ori_0118.fmt -c -t, -U sa
bcp mcdb..tb_ori_0118 format null -f c:\unload_data\tb_ori_0118.fmt -c -t, -U sa -P pswd
4,
执行导入命令
bcp.exe mcdb..tb_ori_0118 in tb_ori_0118.txt -f tb_ori_0118.fmt -e tb_ori_0118.err -m 0 -t\t -r\n -E -U sa -P "Gaiwei" -S 10.0.16.199 -b1000 -k
Error = [Microsoft][SQL Server Native Client 10.0]对于造型说明无效的字符值
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]对于造型说明无效的字符值
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]对于造型说明无效的字符值
已向 SQL Server 发送了 1000 行。总共发送了: 1000
已向 SQL Server 发送了 1000 行。总共发送了: 2000
已向 SQL Server 发送了 1000 行。总共发送了: 3000
已向 SQL Server 发送了 1000 行。总共发送了: 4000
已向 SQL Server 发送了 1000 行。总共发送了: 5000
已向 SQL Server 发送了 1000 行。总共发送了: 6000
已向 SQL Server 发送了 1000 行。总共发送了: 7000
已向 SQL Server 发送了 1000 行。总共发送了: 8000
已向 SQL Server 发送了 1000 行。总共发送了: 9000
已复制 9172 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒) : 3141 平均值: (每秒 2920.09 行。)
遇到 对于造型说明无效的字符值 错误
出现此问题的日期的格式设置为包含短划线 (-) 字符以及月份中或在一天,但不是在两者具有两位数字。例如对于如 12-1-2004 和 1-12-2004年的日期会导致错误。但是,如 12-12-2004年的日期不会导致该错误。
导致bug出现的数据
2009-1-5 00:00:00,0925,012001,001001,600000,13.51,13.51,1448
2009-1-5 00:00:00,0925,012001,001001,600001,3.26,3.26,263701
2009-1-5 00:00:00,0925,012001,001001,600003,2.4,2.4,58800,24
2009-1-5 00:00:00,0925,012001,001001,600004,7.16,7.16,93796,
2009-1-5 00:00:00,0925,012001,001001,600005,4.91,4.91,613501
2009-1-5 00:00:00,0925,012001,001001,600006,2.98,2.98,177906
可以正常导入的数据
2009-01-05 00:00:00,0925,012001,001001,600010,2.6,2.6,193960,7
2009-01-05 00:00:00,0925,012001,001001,600011,6.95,6.95,24325,
2009-01-05 00:00:00,0925,012001,001001,600012,3.8,3.8,58178,15
2009-01-05 00:00:00,0925,012001,001001,600015,7.43,7.43,381907
2009-01-05 00:00:00,0925,012001,001001,600016,4.13,4.13,149423
2009-01-05 00:00:00,0925,012001,001001,600017,3.93,3.93,103359
2009-01-05 00:00:00,0925,012001,001001,600018,3.36,3.36,249984
根据测试
bcp.exe 的-b参数合理设置可以提高数据加载速度,本例子用的是普通pc机测试
bcp.exe mcdb..tb_ori_0118 in tb_ori_0118.txt -f tb_ori_0118.fmt -e tb_ori_0118.err -m 0 -t\t -r\n -E -U sa -P "Gaiwei" -S 10.0.16.199 -b1000 -k
已复制 6800293 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒) : 1048204 平均值: (每秒 6487.57 行。)
bcp.exe mcdb..tb_ori_0118 in tb_ori_0118.txt -f tb_ori_0118.fmt -e tb_ori_0118.err -m 0 -t\t -r\n -E -U sa -P "Gaiwei" -S 10.0.16.199 -b10000 -k
已复制 6800293 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒) : 462985 平均值: (每秒 14687.93 行。)
也可以导入csv文件
EXEC master..xp_cmdshell 'bcp
..
in
-c -t, -S
-U
-P
'
其中:
EXEC master..xp_cmdshell : master..xp_cmdshell 是master数据库的存储过程,主要用来在管理器里面执行操作系统的一些命令
测试语句笔记,语句中用到的是操作系统认证
1,生成format文件
bcp mcdb..stock_quote_1min format null -f stock_quote_1min.fmt -c -t, -T
2,数据导入
bcp.exe mcdb..stock_quote_1min in stock_quote_1min_test.txt -f stock_quote_1min.fmt -e stock_quote_1min.err -m 0 -t, -r\n -E -T -S 10.0.16.199 -b1000 -k