SQL*LOADER初探1
一、sql*loader导入数据速度基本步骤
1、建表jack_loader(数据导入此表)
create table jack_loader ( owner varchar2(30), object_name varchar2(130), object_id number, object_type varchar2(20) );
2、创建数据库原表jack
CREATE TABLE JACK AS SELECT * FROM DBA_OBJECTS;
INSERT INTO JACK SELECT * FROM JACK;
说明:
保证jack数据表中数据库行超过100万行以上(这样便于看到SQL*LOADER的效果和能力)
3、做一些格式调整(参考)
set termout off; 是否在屏幕上显示输出内容,off屏幕不显示查询语句,主要与spool结合使用
set feedback off; 关闭本次sql命令处理的记录条数,默认为on即去掉最后的已经选择的行数
set echo off; 关闭脚本中正在执行的SQL语句的显示
set heading off; 关闭标题的输出,设置为off就去掉了select结果的字段名只显示数据
set trimout on; 去除标准输出每行后面多余的空格
set trimspool on; 将每行后面多余的空格去掉【linesize-实际字符数=多余空格】
4、把屏幕显示导入jack_sqlloader.txt文件作为数据源文件
spool /opt/oracke/exp_imp/jack_sqlloader.txt
[oracle@ocpserver exp_imp]$ cat jack_sqlloader.txt |wc -l
1734176
5、查询数据,导入初始数据到jack_sqlloader.txt中(过程漫长,谁让咱没有数据呢)
select owner||','||object_name||','||object_id||','||object_type from jack;
(同步骤4结合使用)
6、制作control文件jack_sqlload.ctl
load data infile '/opt/oracke/exp_imp/jack.txt' badfile '/opt/oracke/exp_imp/jack_bad.txt' discardfile'/opt/oracke/exp_imp/jack_discard.txt' append into table jack_loader fields terminated by "," trailing nullcols (owner,object_name,object_id,object_type)
7、开始导入
sqlldr jack/oracle control=jack_sqlloader.ctl log=jack_loader.log direct=true
8、示例
[oracle@ocpserver exp_imp]$ sqlldr jack/oracle control=jack_sqlloader.tcl log=jack_loader.log direct=true SQL*Loader: Release 10.2.0.1.0 - Production on Sat Jun 22 23:42:01 2013 Copyright (c) 1982, 2005, Oracle. All rights reserved. Load completed - logical record count 1734176. [oracle@ocpserver exp_imp]$ ls -lh total 75M -rw-r--r-- 1 oracle oinstall 81 Jun 22 23:42 jack_bad.txt -rw-r--r-- 1 oracle oinstall 121K Jun 22 23:42 jack_discard.txt -rw-r--r-- 1 oracle oinstall 5.4M Jun 22 23:42 jack_loader.log -rw-r--r-- 1 oracle oinstall 266 Jun 22 23:41 jack_sqlloader.tcl -rw-r--r-- 1 oracle oinstall 69M Jun 22 23:29 jack_sqlloader.txt -rw-r--r-- 1 oracle oinstall 671K Jun 22 23:04 sqlload01.log [oracle@ocpserver exp_imp]$
SQL> select count(*) from jack_loader;
0
SQL> select count(*) from jack_loader;
1610305
SQL> select count(*) from jack_loader;
1610305
SQL>
本章小结:
1、导入神速,我还在查导入多少数据了,结果就“Load completed”了
2、在导入过程中,发现jack_loader表是没有数据的,导入完成后就有了。
3、看来这样导入数据库效果还是比较令人满意的!
4、这是跟着itpub上一个哥们做的个实验,算是手动敲了一遍,后续自己要多验证。