Oracle sqlldr命令

sqlldr

简介

 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

语法和参数

语法: SQLLDR keyword=value [,keyword=value,...];

 

oracle  sqlldr导入文件只需要两步   

1.  写CTL 控制文件

2.  在cmd 命令窗口中写入导入语句  

第一步:写一个 ctl格式的控制文件

CTL 控制文件(后缀名.ctl)的内容 :

load data --1. 控制文件标识

infile 'xxx.txt' --2. 要导入的数据文件名

insert into table test --3. 将文件插入到数据库的 test 表中

fields terminated by X'09' --4. 用于分割一行中各个属性值的符号(例如每个属性值用逗号分割,那么就把 X'09' 改为 ',')

(id , username ,passwprd ,......) --5. test表中对应的属性名

例:

load data 
infile 'E:/user_data_one_week/zhejiang_user_data.log'   
insert into table day_data
fields terminated by '|'
trailing nullcols   
--(数据中某些属性可能是null值,如果不加入这行导入到数据库的时候就会自动跳过null值的列, 这样数据插入后就会属性和值对应不上)
(time,
user_id,
type,
longitude,
latitude,
height,
content char(10000))  

补充几点

1. 在第三步中运用了 insert into  table,除此之外,还有以下几个值

a. insert,为缺省方式,插入表中时要求表为空,不然会报错

b. append, 在表中追加新纪录,所以表不为空插入的时候也不会报错

c. replace, 删除旧记录,替换成新装载的记录

d. truncate  同上 (原文中该单词拼写错误)

2.表中属性 content 的问题  --  CLOB 类型插入问题

当使用sqlldr加载很长的字符串(超过4000)到表中的clob类型中时,老是报错: 数据文件的字段超出最大长度.

查找相关资料后得知,sqlldr每次读入文件中数据流的数据类型默认为CHAR,长度为 255 。所以只要超过255字符的段都会报这个错。

解决方法很简单,在控制文件中字段后添加上char(1000000),例如:

LOAD DATA 
INFILE * 
INTO TABLE DEMO 
TRUNCATE 
FIELDS TERMINATED BY  ',' 
(d1,
d2 char(1000000)
)

其中表demo的列d2是clob类型,当然1000000只是随便用的一个大数字,只要保证加载的长度不超这个数字就成。

第二步 :  在 cmd 命令窗口中写入导入语句    

->  sqlldr  userid = 用户名 / 密码 @ 数据库名    control = 之前写的ctl控制文件的地址     bad = E:/ bad.bad    log = E:/log.log

->  sqlldr  userid = everyday/123456@orcl   control = E:/data.ctl   bad=E:/bad.bad   log = E:/ log.log

参考文章

https://www.cnblogs.com/xwb583312435/p/9039931.html

https://blog.csdn.net/demonson/article/details/79712207

https://blog.csdn.net/dingguanyi/article/details/82259685

你可能感兴趣的:(Oracle sqlldr命令)