oracle中的SQLLDR工具使用

这个工具可以批量导入数据,具体使用方法如下:
用法: 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)

7.4 直接加载和 SQL*LOADER

                SQL*LOADER 中也可以使用直接加载,它比传统方式效率更高,因为它绕开了 SQL 的解析和数据缓冲区,直接将数据加载到数据文件,这对 OLAP 或者数据仓库系统非常有用。

 

指定加载:

                Sqlldr userid=user/pwd control=control.ctl direct=true

 

指定并行和加载:

                Sqlldr userid=user/pwd control=control.ctl direct=true parallel=true

 

 

SQL*LOADER 直接加载对索引的影响:

1 )索引为非约束性,直接加载可以在加载完毕后维护索引的完整性。

2 )索引为约束性索引,比如主键,直接加载仍然会将数据加载入库,但是会将索引置为 unusable.

 

 

如果使用 SQL*LOADER 的并行直接加载选项,并且表上有索引,将导致加载失败,这是我们可以在 sqlloader 中指定 skip_index_maintenance=true, 来允许加载完成,但是索引状态会变成 unusable ,需要手工 rebuild.


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' 的位置正确。
下面以txt文件为例:
file.txt里包含了要导入的数据内容,file.ctl是控制文件其内容如下:
[oracle@oracle d]$ cat file.ctl
load data                                      //导入数据
infile 'file.txt'                                 //数据所在的文件名
append into table test2                 //要导入到那个表
fields terminated by ','                  //指出数据文件每个记录之间的分隔符
hostname,
ip,
type,
mem,
cpu,
disk                                           //字段名称
)
只要有这两个文件就够了,下面是个简单的脚本:
 
运行此脚本后会在当前目录下生成一个file.log的日志文件,如果有错误存在可以查看日志文件进行排错,如下所示:
[oracle@oracle d]$ cat file.log
SQL*Loader: Release 10.2.0.4.0 - Production on 星期五 7月 16 11:12:52 2010
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
控制文件:      /home/oracle/d/file.ctl
数据文件:      ././file.txt
  错误文件:    /home/oracle/d/file.bad
  废弃文件:    未作指定
(可废弃所有记录)
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续:    未作指定
所用路径:       常规
表 TEST2,已加载从每个逻辑记录
插入选项对此表 APPEND 生效
   列名                        位置      长度  中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
HOSTNAME                            FIRST     *   ,       CHARACTER           
IP                                          NEXT     *   ,       CHARACTER           
TYPE                                     NEXT     *   ,       CHARACTER           
MEM                                      NEXT     *   ,       CHARACTER           
CPU                                      NEXT     *   ,       CHARACTER           
DISK                                    NEXT     *   ,       CHARACTER           
表 TEST2:
  49 行 加载成功。
  由于数据错误, 0 行 没有加载。
  由于所有 WHEN 子句失败, 0 行 没有加载。
  由于所有字段都为空的, 0 行 没有加载。
为绑定数组分配的空间:                 99072 字节 (64 行)
读取   缓冲区字节数: 1048576
跳过的逻辑记录总数:          0
读取的逻辑记录总数:            49
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0
从 星期五 7月  16 11:12:52 2010 开始运行
在 星期五 7月  16 11:12:52 2010 处运行结束
经过时间为: 00: 00: 00.17
CPU 时间为: 00: 00: 00.05
 
以下是非常不错的文献:
http://linjianqing.javaeye.com/blog/501563
http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html

你可能感兴趣的:(数据库)