您好,欢迎访问一九零五行业门户网

sqlldr批量导入导出数据测试

sqlldr是在处理大数据量的操作中建议采用的方式,它有许多性能想关的开关,能最大程度的减少redo,undo的生成,控制数据的处理方式
sqlldr是在处理大数据量的操作中建议采用的方式,它有许多性能想关的开关,能最大程度的减少redo,undo的生成,控制数据的处理方式(insert,append,replace,truncate)
因为项目需要,对比datapump性能还是不理想,所以还是希望采用sqlldr来做。个人做了简单的测试。
根据thomas kyte的介绍,并行执行路径加载时最快的方式,能够直接写只格式化的数据块,最大限度的减少redo,undo的生成。
linux环境下sqlldr一个csv文件
sqlldr加载文件,ora-01722: invalid number解决
oracle sqlldr导入以回车和回车换行字符结尾的文本
sqlldr 导入乱码 oracle客户端字符集问题
oracle sqlldr导入数据使用默认值和提高性能的方法
先写了如下的脚本。可以动态的从某个用户的表中生成元数据。
sqlplus -s $1  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
record 1: rejected - error on table tt, column object_type.
 field in data file exceeds maximum length
 record 2: rejected - error on table tt, column object_type.
 field in data file exceeds maximum length
 record 3: rejected - error on table tt, column object_type.
 field in data file exceeds maximum length
 record 4: rejected - error on table tt, column object_type.
 field in data file exceeds maximum length
尝试了好一会儿,最终发现时set linesize的时候长度设置的比较大,在根据逗号','来解析的时候,最后一个字段的长度就包含了剩余的空格,最终加载的时候就会发现它的长度太大了。已经超出了表定义的长度。
 这种情况,我总不能一个一个指定长度吧。
 这时候想到trimspool的功能,尝试果然奏效。
 spooldata.sh的脚本内容如下:
 sqlplus -s $1  set pages 0
 col object_name format a30
 set linesize 10000
 set trimspool on
 set feedback off
 set colsep ','
 spool $2.lst
 select *from $2 where rownum spool off;
 eof
其它类似信息

推荐信息