sqlldr是在处理大数据量的操作中建议采用的方式,它有许多性能想关的开关,能最大程度的减少redo,undo的生成,控制数据的处理方式(insert,append,replace,truncate)
因为项目需要,对比datapump性能还是不理想,所以还是希望采用sqlldr来做。个人做了简单的测试。
根据thomas kyte的介绍,并行执行路径加载时最快的方式,能够直接写只格式化的数据块,最大限度的减少redo,undo的生成。
sqlldr加载文件,ORA-01722: invalid number解决
Oracle sqlldr导入以回车和回车换行字符结尾的文本
sqlldr 导入乱码 Oracle客户端字符集问题
Oracle sqlldr导入数据使用默认值和提高性能的方法
先写了如下的脚本。可以动态的从某个用户的表中生成元数据。
 
sqlplus -s $1 <<EOF
 set pages 0
 col object_name format a30
 set linseize 10000
 set feedback off
 set colsep ','
 spool $2.lst
 select *from $2 ;
 spool off;
 EOF
 
运行后生成的数据大体如下。
 [ora11g@rac1 sqlldr]$ ksh spooldata.sh n1/n1 t
     370753,     10205,KU$_DOMIDX_OBJNUM_VIEW        ,VIEW
     370754,     10207,KU$_OPTION_OBJNUM_T           ,TYPE
     370755,     10208,KU$_EXPREG                    ,VIEW
     370756,     10210,SYS_YOID0000010209$           ,TYPE
     370757,     10209,KU$_OPTION_OBJNUM_VIEW        ,VIEW
     370758,     10211,KU$_OPTION_VIEW_OBJNUM_VIEW   ,VIEW
     370759,     10212,KU$_MARKER_T                  ,TYPE
     370760,     10214,SYS_YOID0000010213$           ,TYPE
     370761,     10213,KU$_MARKER_VIEW               ,VIEW
     370762,     10215,KU$_TABPROP_VIEW              ,VIEW
     370763,     10216,KU$_PFHTABPROP_VIEW           ,VIEW
     370764,     10217,KU$_REFPARTTABPROP_VIEW       ,VIEW
     370765,     10218,KU$_MVPROP_VIEW               ,VIEW
     370766,     10219,KU$_MVLPROP_VIEW              ,VIEW
     370767,     10220,KU$_TTS_VIEW                  ,VIEW
     370768,     10221,KU$_TAB_TS_VIEW               ,VIEW
     370769,     10222,KU$_TTS_IND_VIEW              ,VIEW
     370770,     10223,KU$_IND_TS_VIEW               ,VIEW
     370771,     10224,KU$_CLU_TS_VIEW               ,VIEW
 
然后准备控制文件 sqlldr.ctl,把数据从t加载到tt里面去。
 load data 
 into table tt
 fields terminated by ','
 (id,object_id,object_name,object_type)
 
尝试导入:
 [ora11g@rac1 sqlldr]$ sqlldr n1/n1 control=sqlldr.ctl data=t.lst 
 SQL*Loader: Release 11.2.0.3.0 - Production on Tue May 27 08:09:25 2014
 Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
 但是没有任何的反馈。
 查看自动生成的sqlldr.log
 里面有如下的错误。
 
   Column Name                  Position   Len  Term Encl Datatype
 ------------------------------ ---------- ----- ---- ---- ---------------------
 ID                                  FIRST     *   ,       CHARACTER            
 OBJECT_ID                            NEXT     *   ,       CHARACTER            
 OBJECT_NAME                          NEXT     *   ,       CHARACTER            
 OBJECT_TYPE                          NEXT     *   ,       CHARACTER            
 

