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

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

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

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

  操作前:

 

  
  
  
  
  1. SQL> select *from bonus; 
  2.   
  3. ENAME      JOB              SAL       COMM 
  4. ---------- --------- ---------- ---------- 

  开始:

  查看sqlldr的说明:

 

  
  
  
  
  1. SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 09:57:43 2012 
  2.  
  3.  
  4.  
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
  6.  
  7.  
  8.  
  9.  
  10.  
  11. 用法: SQLLDR keyword=value [,keyword=value,...] 
  12.  
  13.  
  14.  
  15. 有效的关键字: 
  16.  
  17.  
  18.  
  19.     userid -- ORACLE 用户名/口令 
  20.  
  21.    control -- 控制文件名 
  22.  
  23.        log -- 日志文件名 
  24.  
  25.        bad -- 错误文件名 
  26.  
  27.       data -- 数据文件名 
  28.  
  29.    discard -- 废弃文件名 
  30.  
  31. discardmax -- 允许废弃的文件的数目         (全部默认) 
  32.  
  33.       skip -- 要跳过的逻辑记录的数目  (默认 0) 
  34.  
  35.       load -- 要加载的逻辑记录的数目  (全部默认) 
  36.  
  37.     errors -- 允许的错误的数目         (默认 50) 
  38.  
  39.       rows -- 常规路径绑定数组中或直接路径保存数据间的行数 
  40.  
  41.                (默认: 常规路径 64, 所有直接路径) 
  42.  
  43.   bindsize -- 常规路径绑定数组的大小 (以字节计)  (默认 256000) 
  44.  
  45.     silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) 
  46.  
  47.     direct -- 使用直接路径                     (默认 FALSE) 
  48.  
  49.    parfile -- 参数文件: 包含参数说明的文件的名称 
  50.  
  51.   parallel -- 执行并行加载                    (默认 FALSE) 
  52.  
  53.       file -- 要从以下对象中分配区的文件 
  54.  
  55. skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区  (默认 FALSE) 
  56.  
  57. skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用  (默认 FALSE) 
  58.  
  59. commit_discontinued -- 提交加载中断时已加载的行  (默认 FALSE) 
  60.  
  61.   readsize -- 读取缓冲区的大小               (默认 1048576) 
  62.  
  63. external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NOT_USED) 
  64.  
  65. columnarrayrows -- 直接路径列数组的行数  (默认 5000) 
  66.  
  67. streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000) 
  68.  
  69. multithreading -- 在直接路径中使用多线程 
  70.  
  71.  resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE) 
  72.  
  73. resumable_name -- 有助于标识可恢复语句的文本字符串 
  74.  
  75. resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200) 
  76.  
  77. date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000) 

 

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

内容如下:

 

  
  
  
  
  1. LOAD DATA             --开头部分是标准语法 
  2.  
  3. INFILE *              --这一句是引用data文件,这里是和控制文件放在一起,所以用* 
  4.  
  5. --中间的部分全部是控制部分,也可以分开写,control,log和data文件 
  6.  
  7. INTO TABLE BONUS      --表名   
  8.  
  9. FIELDS TERMINATED BY ","   --设置数据的分隔符,看看下面的数据是不是都是","分开的 
  10.  
  11. (ENAME,JOB,SAL)      --字段信息 
  12.  
  13. BEGINDATA            --下一行开始全部是数据 
  14.  
  15. SMITH,CLEAK,3904 
  16.  
  17. ALLEN,SALESMAN,2891 
  18.  
  19. WARD,SALESMAN,3128 
  20.  
  21. KING,PRESIDENT,2523 

② 执行命令,得到结果

 

  
  
  
  
  1. D:\dump>sqlldr scott/lzz123 control=test1.ctl 
  2.  
  3.  
  4.  
  5. SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 10:11:40 2012 
  6.  
  7.  
  8.  
  9. Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
  10.  
  11.  
  12.  
  13. 达到提交点 - 逻辑记录计数 3 
  14.  
  15. 达到提交点 - 逻辑记录计数 4 

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

 

  
  
  
  
  1. SQL> select *from bonus; 
  2.  
  3.   
  4.  
  5. ENAME      JOB              SAL       COMM 
  6.  
  7. ---------- --------- ---------- ---------- 
  8.  
  9. SMITH      CLEAK           3904  
  10.  
  11. ALLEN      SALESMAN        2891  
  12.  
  13. WARD       SALESMAN        3128  
  14.  
  15. KING       PRESIDENT       2523  

!!:圆满完成。

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

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

 

  
  
  
  
  1. SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 11月 26 10:11:40 2012 
  2.  
  3.  
  4.  
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
  6.  
  7.  
  8.  
  9. 控制文件:      test1.ctl 
  10.  
  11. 数据文件:      test1.ctl 
  12.  
  13.   错误文件:    test1.bad 
  14.  
  15.   废弃文件:    未作指定 
  16.  
  17.   
  18.  
  19. (可废弃所有记录) 
  20.  
  21.  
  22.  
  23. 要加载的数: ALL 
  24.  
  25. 要跳过的数: 0 
  26.  
  27. 允许的错误: 50 
  28.  
  29. 绑定数组: 64 行, 最大 256000 字节 
  30.  
  31. 继续:    未作指定 
  32.  
  33. 所用路径:       常规 
  34.  
  35.  
  36.  
  37. 表 BONUS,已加载从每个逻辑记录 
  38.  
  39. 插入选项对此表 INSERT 生效 
  40.  
  41.  
  42.  
  43.    列名                        位置      长度  中止 包装数据类型 
  44.  
  45. ------------------------------ ---------- ----- ---- ---- --------------------- 
  46.  
  47. ENAME                               FIRST     *   ,       CHARACTER             
  48.  
  49. JOB                                  NEXT     *   ,       CHARACTER             
  50.  
  51. SAL                                  NEXT     *   ,       CHARACTER             
  52.  
  53.  
  54.  
  55.  
  56.  
  57. 表 BONUS: 
  58.  
  59.   4 行 加载成功。 
  60.  
  61.   由于数据错误, 0 行 没有加载。 
  62.  
  63.   由于所有 WHEN 子句失败, 0 行 没有加载。 
  64.  
  65.   由于所有字段都为空的, 0 行 没有加载。 
  66.  
  67.  
  68.  
  69.  
  70.  
  71. 为绑定数组分配的空间:                 49536 字节 (64 行) 
  72.  
  73. 读取   缓冲区字节数: 1048576 
  74.  
  75.  
  76.  
  77. 跳过的逻辑记录总数:          0 
  78.  
  79. 读取的逻辑记录总数:             4 
  80.  
  81. 拒绝的逻辑记录总数:          0 
  82.  
  83. 废弃的逻辑记录总数:        0 
  84.  
  85.  
  86.  
  87. 从 星期一 11月 26 10:11:40 2012 开始运行 
  88.  
  89. 在 星期一 11月 26 10:11:41 2012 处运行结束 
  90.  
  91.  
  92.  
  93. 经过时间为: 00: 00: 00.48 
  94.  
  95. CPU 时间为: 00: 00: 00.06 

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

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

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

 

 

 

 

 

你可能感兴趣的:(oracle,加载,数据,文件,导入)