在实际工作中需要把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 LOAD DATA INFILE ‘c:\xxxxxe.txt‘ ---------数据文件,即txt文件 Append INTO TABLE Demo7.TMS_BRANCHCODE2 -----表名,全路径 FIELDS TERMINATED BY X‘09‘ -----数据用制表符分割 TRAILING NULLCOLS ( ID, ------表中字段 Branch_Plant, SO_Number, Trip_Number, Shippment_Date --"to_date(:Shippment_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, Barcode_Seg_5, Last_Updated_Time --"to_date(:Shippment_Date,‘‘‘yyyy-mm-dd hh24:mi:ss‘‘‘)" )
2.运行.ctl文件导入数据,打开CMD运行如下文件
C:/>sqlldr userid=system/[email protected] serviceName control=c:\xxx.ctl
时间: 2024-10-12 13:50:52