【实验内容】
将CSV文件dept2_01.dat中的数据导入到scott用户下的dept2表中。
//(1)创建一个dept2表
C:\>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:15:57 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott@test
输入口令:
已连接。
SQL> create table dept2 as
2 select * from dept;
表已创建。
SQL> desc dept2
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL>
//(2)做成dept2_01.dat数据文件。内容如下:
----------------------------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
----------------------------------------
//(3)做成sqlloder导入用控制文件 dept2_01.ctl
这只是一个普通的csv格式文件的数据导入,ctl文件简单写了一下:
----------------------------------------
LOAD DATA
INFILE *
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
DNAME,
LOC
)
----------------------------------------
//(4)启动并执行sqlloader。
先简单看一下sqlloader的语法。sqlloader自解释的比较清楚,自己看吧。不明白的可以百度一下:-D
------------------
C:\>sqlldr
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:34:22 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
用法: SQLLDR keyword=value [,keyword=value,...]
有效的关键字:
userid -- ORACLE 用户名/口令
control -- 控制文件名
log -- 日志文件名
bad -- 错误文件名
data -- 数据文件名
discard -- 废弃文件名
discardmax -- 允许废弃的文件的数目 (全部默认)
skip -- 要跳过的逻辑记录的数目 (默认 0)
load -- 要加载的逻辑记录的数目 (全部默认)
errors -- 允许的错误的数目 (默认 50)
rows -- 常规路径绑定数组中或直接路径保存数据间的行数
(默认: 常规路径 64, 所有直接路径)
bindsize -- 常规路径绑定数组的大小 (以字节计) (默认 256000)
silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)
direct -- 使用直接路径 (默认 FALSE)
parfile -- 参数文件: 包含参数说明的文件的名称
parallel -- 执行并行加载 (默认 FALSE)
file -- 要从以下对象中分配区的文件
skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区 (默认 FALSE)
skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用 (默认 FALSE)
commit_discontinued -- 提交加载中断时已加载的行 (默认 FALSE)
readsize -- 读取缓冲区的大小 (默认 1048576)
external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED)
columnarrayrows -- 直接路径列数组的行数 (默认 5000)
streamsize -- 直接路径流缓冲区的大小 (以字节计) (默认 256000)
multithreading -- 在直接路径中使用多线程
resumable -- 启用或禁用当前的可恢复会话 (默认 FALSE)
resumable_name -- 有助于标识可恢复语句的文本字符串
resumable_timeout -- RESUMABLE 的等待时间 (以秒计) (默认 7200)
date_cache -- 日期转换高速缓存的大小 (以条目计) (默认 1000)
PLEASE NOTE: 命令行参数可以由位置或关键字指定
。前者的例子是 'sqlload
scott/tiger foo'; 后一种情况的一个示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定参数的时间必须早于
但不可迟于由关键字指定的参数。例如,
允许 'sqlldr scott/tiger control=foo logfile=log', 但是
不允许 'sqlldr scott/tiger control=foo log', 即使
参数 'log' 的位置正确。
C:\>
-----------------
下面是我执行的语句
-----------------
C:\>sqlldr scott/tiger data="D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat" control="D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl" log="D:\Oracle学习\test\sqlloader\实验1\dept2_01.log" bad="D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad"
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:47:08 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4
C:\>
-----------------
以及生成的log文件的内容
-----------------
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:47:08 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
控制文件: D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl
数据文件: D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat
错误文件: D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad
废弃文件: 未作指定
(可废弃所有记录)
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续: 未作指定
所用路径: 常规
表 DEPT2,已加载从每个逻辑记录
插入选项对此表 APPEND 生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO FIRST * , CHARACTER
DNAME NEXT * , CHARACTER
LOC NEXT * , CHARACTER
表 DEPT2:
4 行 加载成功。
由于数据错误, 0 行 没有加载。
由于所有 WHEN 子句失败, 0 行 没有加载。
由于所有字段都为空的, 0 行 没有加载。
为绑定数组分配的空间: 49536 字节 (64 行)
读取 缓冲区字节数: 1048576
跳过的逻辑记录总数: 0
读取的逻辑记录总数: 4
拒绝的逻辑记录总数: 0
废弃的逻辑记录总数: 0
从 星期日 6月 12 22:47:08 2011 开始运行
在 星期日 6月 12 22:47:09 2011 处运行结束
经过时间为: 00: 00: 00.36
CPU 时间为: 00: 00: 00.26
-----------------
看一下数据库中的表数据
-----------------
SQL> select * from dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
-----------------
【总结一下】
1、创建一个测试用的dept2表。
--------------------
create table dept2
as
select * from dept;
--------------------
2、做成导入用的数据文件dept2_01.dat,逗号分隔符。
--------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
--------------------
3、做成SQL*Loader用的控制文件dept2_01.ctl
--------------------
LOAD DATA
INFILE *
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
DNAME,
LOC
)
--------------------
4、执行SQL*Loader
--------------------
//这个使用的是全路径
C:\>sqlldr scott/tiger data="D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat" control="D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl" log="D:\Oracle学习\test\sqlloader\实验1\dept2_01.log" bad="D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad"
//上面这种写法长了点,呵呵,换种写法,先切换了一下基础路径,如下:
C:\>d:
D:\>cd D:\Oracle学习\test\sqlloader\实验1\
D:\Oracle学习\test\sqlloader\实验1>sqlldr scott/tiger data="dept2_01.dat" control="dept2_01.ctl" log="dept2_01.log" bad="dept2_01.bad"
//也可以再改一下写法:
控制文件改一下dept2_02.ctl
---------
LOAD DATA
INFILE 'dept2_01.dat'
BADFILE 'dept2_01.bad'
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
DNAME,
LOC
)
---------
SQL*Loader执行命令
---------
C:\>d:
D:\>cd D:\Oracle学习\test\sqlloader\实验1\
D:\Oracle学习\test\sqlloader\实验1>sqlldr scott/tiger control="dept2_02.ctl" log="dept2_01.log"
---------
--------------------
以上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20335819/viewspace-697760/ ,如需转载,请注明出处,否则将追究法律责任。