[Oracle] SQL*Loader 详细使用教程(1)- 总览

SQL*Loader原理

 

SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高。其示意图如下:

控制文件(Control File) (.ctl):用于控制数据导入的行为方式的文件(最重要的文件)

参数文件(可选)(Parameter File) (.par):可以把参数直接写在控制文件里,也可以单独写一个参数文件

数据文件(Data Files) :放置源数据的平面文件(可以一次性导入多个数据文件)

坏文件(Bad File) (.bad):在数据加载时,把无法正确加载的数据放入错误文件中(比如数据格式、数据类型问题等)

丢弃文件(可选)(Discard File) (.dsc):有些数据,虽然数据格式、数据类型没有问题,但它被逻辑条件过滤掉了(由控制文件WHEN设置),会被放入丢失文件

日志文件(Log File) (.log):记录SQL*Loader的数据加载过程

 

SQL*Loader的数据加载方式

 
SQL*Loader支持3种数据加载方式,分别是:
  • 传统路径加载(direct=false):等同于insert语句
  • 直接路径加载(direct=true):绕过SGA,把数据直接导入高水位线(HWM)以上,可设置并行加载,性能比传统路径加载更高,但限制也更多
  • 外部表加载(较少用):先为数据文件上创建一个外部表,然后再把数据从外部表insert到目标表中
 

数据文件的记录格式

 
从SQL*Loader的角度来看,数据文件里的数据是以记录组织的,分为以下三种记录格式(由控制文件的INFILE参数设置):
 
定长记录格式
这种方式灵活性最差,但性能却最好,它的语法如下:
INFILE datafile_name "fix n"
表示数据文件里的每个记录定长为n个字节。
 
变长记录格式
INFILE "datafile_name" "var n"
变长记录分为两个部分:记录长度和记录本身,看下面这个例子:
load data
infile 'example.dat'  "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
 col2 char(7))

example.dat:
009hello,cd,010world,im,
012my,name is,
var 3 表示记录长度为3个字节,紧跟其后的就是记录本身,上例中,第一个记录长度为9个字节(009),值为其后的9个字节(hello,cd,);第二个记录长度为10个字节(010),值为其后的10个字节(world,im,\n),\n表示第一行行尾的换行符;以此类推。
 
流记录格式
这是最常用也是默认的记录格式,记录以分隔符分开,其语法如下:
INFILE datafile_name ["str terminator_string"]
分隔符分为两种:
1. 'char_string':用单引号或双引号扩起来的字符串
2.X'hex_string':十六进制的字节字符串。
默认的分隔符为换行符'\n',即每行为一个记录。
 
posted @ 2016-07-30 10:33  zfswff  阅读(1647)  评论(0编辑  收藏  举报