Migrate Oracle Table to SQLServer2008

源数据库都是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

 

 

你可能感兴趣的:(sqlserver,oracle,table,sql,server,microsoft,数据库)