Oracle支持的导入导出方式比较多样,从10G之前的EXP/IMP,到10G的EXPDP/IMPDP,还有可传输表空间的应用,Spatial中EasyLoad的使用,建立外部表,以及使用SQL*Loader加载外部数据等,每种应用对应不同的场景,今天简单试用下SQL*Loader来实现外部数据加载。
SQL*Loader的框架主要包含控制文件、日志文件、错误文件、丢弃文件等,其中控制文件包含如何加载数据的总规则,其他文件包含加载过程中产生的相应数据。
--日志文件
SQL*Loader=>控制文件(指定数据源)=>--错误文件 =>加载数据 =>验证数据
--丢弃文件
1. 给出数据源
这里以SCOTT用户下的DEPT表为数据源,构建一个外部文件
SQL> spool 'f:\sp.txt'
SQL> set heading off
SQL> select * from dept;
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> spool off
找到输出文件,将多余的空格去除并在记录之间以‘,’隔开,方便数据加载时使用分隔符
2. 编写控制文件
主要包含数据源、目的地、加载规则等,创建 F:\sqlldr.ctl,包含以下内容
load data -- 新的装载任务
infile 'f:\sp.txt' -- 数据源
into table dept_cp -- 目的地
fields terminated by ',' -- 装载规则
(deptno,dname,loc)
3. 开始装载
D:\>sqlldr scott/tiger control='f:\sqldr.ctl' log='f:\sqldr.log'
装载结束后查看日志,可以检查总数据量及失败数据量,并且将错误数据和丢弃数据放在错误文件和丢弃文件中