分享

SQLLDR的使用方法

 jyhjun 2014-11-25
用于将格式化的文本数据上载到表中去

以表emp为例

首先编写一个控制命令的脚本文件,通常以ctl结尾,内容

emp.ctl

load data

append

into table emp

fields terminated by ‘‘

(

no float external,

name char(20),

age integer external,

duty char(1),

salary float external,

upd_ts date(14) ‘YYYYMMDDHH24MISS‘

)

括号里对数据文件里每个数据域进行解释,以此在上载时与目标表进行比对。

除了append外,还有insert、replace、truncate等方式,与append大同小异,不作的解释。

再将上载数据组织成数据文件,通常以dat结尾,内容

emp.dat

100000000001Tom000020100000000500020020101000000

100000000002Jerry000025200000000800020020101235959

分隔符要与ctl文件中fields terminated by指定的一致,这个例子中为""

ctl和dat文件就绪后可以执行上载,命令为:

sqlldr dbuser/oracle control=emp.ctl data=emp.dat

也可以将dat文件合并在ctl文件中,ctl文件改写为:

emp2.ctl

load data

infile *

append

into table emp

fields terminated by ‘‘

(

no float external,

name char(20),

age integer external,

duty char(1),

salary float external,

upd_ts date(14) ‘YYYYMMDDHH24MISS‘

)

begindata

100000000003Mulder000020100000000500020020101000000

100000000004Scully000025200000000800020020101235959

控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile *则表明数据在本控制文件以begin data开头的区域内。

这样命令变成:

sqlldr dbuser/oracle control=emp2.ctl

conventional path

通过常规通道方式上载。

rows:每次提交的记录数

bindsize:每次提交记录的缓冲区

readsize:与bindsize成对使用,其中较小者会自动调整到较大者

sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。

命令为:

sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000

direct path

通过直通方式上载,不进行SQL解析。

命令为:

sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true

例如:

sqlldr userid=%s control=%s log=%s readsize=6553600 bindsize=6553600 rows=5000 silent=header,feedback direct = true

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多