现在的位置: 首页 > 综合 > 正文

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

2014年10月02日 ⁄ 综合 ⁄ 共 2783字 ⁄ 字号 评论关闭

 有的时候我们需要导入大量的数据,使用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://blog.csdn.net/orangleliu

抱歉!评论已关闭.