日期:2014-5-16 浏览次数:20232次

linux oracle利用 SQL*Loader数据导入文件数据


一:SQL*Loader简介


SQL*Loader:使用sqlldr将非oracle数据库数据导入进oracle数据库。
SQLLAR基本语法:
SQLLDR keyword=value[ ,keword=value]
例如: $sqlldr scott/oracle control=emp.ctl data=emp.data bad=emp.bad log=emp.log
控制文件:控制文件由三个部分组成,
1,全局选项:行,跳过的记录数等
infile子句制定的输入数据
数据特征说明: comment:--注释
如:
--this is a ……     //--表示注释
LOAD DATA
infile *          //表明数据在本文件中以begindata开头的区域内
APPEND      //append,追加导入(除此之外还有insert、repace/truncate)
INTO TABLE SCOTT.JACK    //数据导入scott.jack
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'   //fields terminated by','        文件是使用,来做分隔符,optionally enclosed by '"' 文件试试用"来作为定界符
FILLER_1 FILLER,       //制定某一列不会被装载
--DEPTNO position(1:2),DNAME position(*:16),    //指定列的位置,deptno为1-2咧的数据,都那么为0-16列数据
seqno  rrecnum     //载入每行的行号
SKIP n     //制定导入时可以跳过多少行数据
(
  ID INTEGER EXTERNAL,
  AGE INTEGER EXTERNAL
)
--Begindata
--1,2
--3,4
--1,b

输入文件:被控制文件制定数据格式的数据行集
坏文件:bad=jack.bad 不满足SQL*loader约束活不满组数据库数据插入约束的文件。
丢弃文件:不满足用户设定的规范而被丢弃的文件
日志文件:全程跟踪数据导入过程的文件。

二:高级选项:conventional path load 与 direct path load

conventional path load
通过常规通道方式上传
命令语法为:
$ sqlldr scott/oracle control=jack.ctl log=jack.log rows=1000 bindsize=8192000
其中:rows: 每次提交的记录数
Bindsize:每次提交的记录缓冲区大小
Readsize:与bindsize配合使用,其中较小者会自动调整到较大者
Direct-path load:
通过直通式方式上载,可以跳过数据库的相关逻辑,不进行SQL解析,而直接将数据文件直接导入到数据库中。
命令语法为:
$sqlldr scott/oracle control=jack.ctl log=jack.log direct=true

附:如果想导入excel文件的话,可以先将excel文件保存为csv格式,然后再导入(注意:csv格式里面所有的字符格式都是“字符型”char)

三、实例:
使用SQL*Loader导数据
首先在数据库中创建一个目录对象,并且该对象与操作系统中物理文件夹对应,并给文件夹授权。
!host mkdir /u01/expdp/jack
Create directory "jack" as '/u01/expdp/jack'
Grant read,write on directory "jack" to "plubic"
做完之后可以查看目录对象:
Select * from dba_directories;
在对应的文件夹中创建一个数据文件
!Host vim /u01/expdp/jack/jack.txt
1,2
1,3
2,b
在数据库中创建一张表,并且注意表的
Create table jack (id number(12),age number(12))
4、利用EM生成控制文件,也可以自己手工写

--this is a ……
LOAD DATA
Infile *
APPEND
INTO TABLE SCOTT.JACK
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
  ID INTEGER EXTERNAL,
  AGE INTEGER EXTERNAL
)

利用SQL*Loader添加数据
Sqlldr scott/oracle control=jack.ctl logfile=jack.log