关于 Oracle 的数据导入导出及 Sql Loader (sqlldr)

我使用的  insert into 更新表中查询到的数据

使用的 DBLINK 查询源数据表

INSERT INTO tb_demo SELECT * FROM [email protected] where iyear=2011 and imonth=8 and flag=0 

考虑到更新后, 表中最大的 SEQUENCE 可能重复的问题, 编辑了各表的 SEQUENCE值。 

如果必须使用自身数据库的 SEQUENCE 值, 可考虑增加辅助字段。 OLDID 记录原始的主键值。

关联表 UPDATE SIM_TRAING_SIM M set SUITE_ID = (SELECT S.ID FROM SUITE S WHERE S.OLDID=M.SUITE_ID) WHERE M.AC_TYPE_CODE=14 AND ...........

实际测试通过的SQL:

CREATE table wu_t_suite as select SEQ_SIM_BIG_SUITE.NEXTVAL BIG_SUITE_ID, T.BIG_SUITE_ID BIG_SUITE_ID_LK, 
T.BIG_SUITE_NO, T.AC_TYPE_CODE, T.FIXED_YEAR from sim_big_suite@DBLINK_CRS_234 T WHERE T.BIG_SUITE_ID BETWEEN 1415 AND 1420

CREATE table wu_t_simsuite as select SEQ_SIM_OPERATE_LOG.NEXTVAL SUITE_ID, T.BIG_SUITE_ID, 
T.SUITE_NO, T.AC_TYPE_CODE, T.FIXED_YEAR from sim_suite@DBLINK_CRS_234 T WHERE T.BIG_SUITE_ID BETWEEN 1415 AND 1420

UPDATE wu_t_simsuite t SET t.big_suite_id = (SELECT b.big_suite_id FROM wu_t_suite b WHERE b.big_suite_id_lk = t.big_suite_id) 

http://blog.sina.com.cn/s/blog_6239341c0100j9zv.html

sqlldr 可以导入数据量比较大的CSV文件,比PLSQL的TEXTIMPORT效率高很多。

实测92118330条数据约半小时。

ldr_object.ctl控制文件:

load data
infile "F:\2017platstatic\data.csv"
truncate into table PAX_TICKET_TEMP
fields terminated by "," optionally enclosed by ' ' TRAILING NULLCOLS
(TICKET_NO,
PAX_ID_NO,
PAX_ID_TYPE,
created "to_date(:created,'yyyy-mm-dd hh24:mi:ss')",
status  "trim(:status)"
)

命令格式:

sqlldr 用户名/密码@//172.**.***.***:端口/服务名 control=D:\oracleexp\sqlldr\ldr_object.ctl bad=D:\oracleexp\sqlldr\ldr_object2.bad log=D:\oracleexp\sqlldr\ldr_object2.log skip=0 errors=9999 rows=5000 bindsize=20971520 readsize=20971520

参考连接:

https://www.cnblogs.com/jyzhao/p/4819884.html



 

猜你喜欢

转载自jxdwuao.iteye.com/blog/1704642