您的位置:首页 > 数据库 > Oracle

[oracle]管理--sqlldr 数据加载的使用

2012-11-26 10:34 281 查看
有的时候我们需要导入大量的数据,使用sqlldr把文本导入到表中是一件很高效率的事情,这是sqlldr命令,也就是SQL*LOADER的小案例一枚。

准备环境:oracle10.2 cmd控制台 scott方案的bonus表

操作目的: 使用文本中的数据,加载到bonus表中

操作前:

SQL> select *from bonus;

ENAME      JOB              SAL       COMM
---------- --------- ---------- ----------

开始:

查看sqlldr的说明:

SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 09:57:43 2012

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)


① 使用前的准备,已经建立的表,控制文件(D盘下dump\test1.ctl)

内容如下:

LOAD DATA             --开头部分是标准语法

INFILE *              --这一句是引用data文件,这里是和控制文件放在一起,所以用*

--中间的部分全部是控制部分,也可以分开写,control,log和data文件

INTO TABLE BONUS      --表名

FIELDS TERMINATED BY ","   --设置数据的分隔符,看看下面的数据是不是都是","分开的

(ENAME,JOB,SAL)      --字段信息

BEGINDATA            --下一行开始全部是数据

SMITH,CLEAK,3904

ALLEN,SALESMAN,2891

WARD,SALESMAN,3128

KING,PRESIDENT,2523

② 执行命令,得到结果

D:\dump>sqlldr scott/lzz123 control=test1.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 10:11:40 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

达到提交点 - 逻辑记录计数 3

达到提交点 - 逻辑记录计数 4

③ 查看记录,看看是否加载成功。

SQL> select *from bonus;

ENAME      JOB              SAL       COMM

---------- --------- ---------- ----------

SMITH      CLEAK           3904

ALLEN      SALESMAN        2891

WARD       SALESMAN        3128

KING       PRESIDENT       2523

!!:圆满完成。

* 在dump目录下我们找到了test1.log文件,这是自动生成的,当然我们也可以指定名称

* 打开log文件看到如下内容:

SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 10:11:40 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

控制文件:      test1.ctl

数据文件:      test1.ctl

错误文件:    test1.bad

废弃文件:    未作指定

(可废弃所有记录)

要加载的数: ALL

要跳过的数: 0

允许的错误: 50

绑定数组: 64 行, 最大 256000 字节

继续:    未作指定

所用路径:       常规

表 BONUS,已加载从每个逻辑记录

插入选项对此表 INSERT 生效

列名                        位置      长度  中止 包装数据类型

------------------------------ ---------- ----- ---- ---- ---------------------

ENAME                               FIRST     *   ,       CHARACTER

JOB                                  NEXT     *   ,       CHARACTER

SAL                                  NEXT     *   ,       CHARACTER

表 BONUS:

4 行 加载成功。

由于数据错误, 0 行 没有加载。

由于所有 WHEN 子句失败, 0 行 没有加载。

由于所有字段都为空的, 0 行 没有加载。

为绑定数组分配的空间:                 49536 字节 (64 行)

读取   缓冲区字节数: 1048576

跳过的逻辑记录总数:          0

读取的逻辑记录总数:             4

拒绝的逻辑记录总数:          0

废弃的逻辑记录总数:        0

从 星期一 11月 26 10:11:40 2012 开始运行

在 星期一 11月 26 10:11:41 2012 处运行结束

经过时间为: 00: 00: 00.48

CPU 时间为: 00: 00: 00.06

详细记录了整个导入过程的参数,如果导入出错还会有错误文件。

当然像excel表,导入部分数据等等的功能也可以实现的,只是控制文件的参数不同。

参考资料:三思《涂抹oracle》;

本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://orangleliu.blog.51cto.com/2554001/1070723
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: