分享

oracle sqlldr

 昵称3080113 2013-08-15
最近需弄批量导入数据,别人只给了我一个ctl的控制文件,自己就琢磨了下怎么用
1、创建表ua_test存放需导入的数据,sql如下:
create table ua_test
(ad_space_id number not null,
os_type varchar2(40),
ad_format varchar2(40));
2、需要导入的数据文件先建好,命名: ua_import.txt,数据如下
82532|iphone|banner
81591|android|fullscreen
90568|iphone|banner
82571|ipad|vedio
3、控制文件:import_control.ctl
Load data                                                     --1、控制文件标识
infile 'D:\ImportData\ua_import.txt'            --2、要输入的数据文件名为ua_import.txt
Append into table ua_test                         --3、向表ua_test中追加记录
FIELDS TERMINATED BY '|'                    --4ua_import.txt文件的内容以'|'分隔,字段终止于空行
TRAILING NULLCOLS
(
id,
os_type,
format
)                                                                   --定义列对应顺序
其中append为数据装载方式,还有其他选项:
ainsert,为缺省方式,在数据装载开始时要求表为空
bappend,在表中追加新记录
creplace,删除旧记录(全部的记录),替换成新装载的记录
dtruncate,同上先删除再新增

4、import_control.ctl和ua_import.txt放在d盘的同一个目录里,
sqlldr userid=DataSource@数据库用户名/数据库密码 control='D:\ImportData\import_control.ctl' data='D:\ImportData\ua_import.txt' log='D:\ImportData\ua_test.log'

5. sqlldr用到的主要参数(参考别人写的)
1) userid -- ORACLE username/password
2) control –控制文件
3) log –记录的日志文件
4) bad –坏数据文件,记录错误的未加载数据
5) data –数据文件,* data参数只能指定一个数据文件,如果控制文件也通过infile指定了数据文件,并且指定多个,sqlldr在执行时,先加载data参数指定的数据文件,控制文件中第一个infile指定的数据文件被忽略,但后续的infile指定的数据文件继续有效
6) discard –丢弃的数据文件
7) discardmax –允许丢弃数据的最大值 (默认全部)
8) skip --跳过记录数,从数据文件中,从第一行开始要计算要跳过的行数 (默认0)
9) load -- Number of logical records to load (默认全部)
10) errors –允许的错误记录数,超过则终止任务(默认50)
11) rows -- Number of rows in conventional path bind array or between direct path data saves(每次提交的记录数,默认:常规路径64,直接路径全部,所以使用直接路径的话,效率会比普通的好太多太多)
12) bindsize -- Size of conventional path bind array in bytes每次提交记录的缓冲区的大小,字节为单位,默认256000)
13) silent --禁止输出信息(header,feedback,errors,discards,partitions)
14) direct –使用直通路径方式导入(默认FALSE)
如果表中有索引的话,是不能指定direct=TRUE,除非使用skip_index_maintenance=TRUE,这个就是在导入的时候忽略索引,所以在数据导入完毕以后,查看索引的状态应该都是无效的,需要重建之,如下SQLselect * from dba_indexes where table_name='?' ;
alter idnex index_name rebuild ;
重新建立索引要比新建索引快。
15) parallel --并行导入 (默认FALSE,注意:parallel并不是让一个sqlldr语句起多个进程来加载数据,而是不锁住加载表,允许别的直接路径加载.所以要使parallel起作用,应该先将要加载的数据文件分成多个,用多个sqlldr语句同时加载,如下例:
sqlldr userid=scott/tiger control=load1.ctl data=data1.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load2.ctl data=data2.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load3.ctl data=data3.txt direct=y parallel=true &)
16) skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默认FALSE)
17) skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(默认FALSE)


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多