代码改变世界

SQL Server 2012大数据导入Oracle的解决方案

2015-07-16 11:56  假面Wilson  阅读(637)  评论(0编辑  收藏  举报

在实际工作中需要把SQL Server中的表导入Oracle。之前尝试过直接用SQL Server的DTS进行都没问题。但这次因为数据量在千万级所以报虚拟内存不足。最后通过SQL Server导出txt文件和Oracle sqlldr导入的方案解决。

一.SQL Server导出txt文件

方法1.使用DTS进行导出。

方法2.使用BCP命令进行导出,具体可以查看园内文章:SQL Server中bcp命令的用法以及数据批量导入导出

通过以上方法可以生成txt文件

 

二.Oracle sqlldr导入txt文件

1.创建sqlldr的.ctl文件,具体参数命令可以查看相关文章:用Oracle sqlldr导入文本文件TXT 总结  Oracle sqlldr导入数据使用默认值和提高性能的方法

OPTIONS(skip_index_maintenance=TRUE,direct=true,BINDSIZE=20971520,READSIZE=20971520,ERRORS=-1,ROWS=500000)
--unrecoverable
LOAD DATA
--CHARACTERSET AL32UTF8
INFILE 'c:\BranchCode_2017.txt' ---------数据文件,即txt文件
Append INTO TABLE SIMSDW.TMS_BRANCHCODE_2017 -----表名
FIELDS TERMINATED BY X'09' ------数据用制表符分割
trailing nullcols
( ------表中字段
ID
,Branch_plant
,SO_Number
,Trip_Number
,Shippment_Date DATE "yyyy-mm-dd hh24:mi:ss"
,Sold_to
,Sold_to_Name
,Ship_to
,Ship_to_Name
,BarCode_Info
,Barcode_Seg_1
,Barcode_Seg_2
,Barcode_Seg_3
,Barcode_Seg_4 DATE "yyyy-mm-dd hh24:mi:ss"
,Barcode_Seg_5
,Last_updated_time DATE "yyyy-mm-dd hh24:mi:ss"
) 

2.运行.ctl文件导入数据,打开CMD运行如下文件

C:/>sqlldr userid=system/manager@ serviceName control=c:\xxx.ctl log=C:\xxx.log