Oracle教程:使用SQL*Loader高速批量数据加载工具


1.控制文件中包含要加载的数据

首先创建一张测试表

  1. SQL> show user  
  2. USER 为 "ING"  
  3. SQL> create table dept  
  4.   2  (deptno number(10) constraint dept_pk primary key,  
  5.   3   dname varchar2(20),  
  6.   4   loc varchar2(20));  
  7.   
  8. 表已创建。  

然后创建一个控制文件(其中包含被加载的数据)

  1. [Oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ cat demo1.ctl   
  4. LOAD DATA  
  5. INFILE *  
  6. INTO TABLE DEPT  
  7. FIELDS TERMINATED BY ','  
  8. (DEPTNO,DNAME,LOC)  
  9. BEGINDATA  
  10. 10,Sales,Virginia  
  11. 20,Accounting,Virginia  
  12. 30,Consulting,Virginia  
  13. 40,Finance,Virginia  

然后在命令行执行加载

  1. [oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ sqlldr userid=ing/ing control=demo1.ctl log=demo1.log  
  4.   
  5. SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:39:54 2011  
  6.   
  7. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  8.   
  9. 达到提交点 - 逻辑记录计数 4  

查看dept表

  1. SQL> select * from dept;  
  2.   
  3.     DEPTNO DNAME                LOC  
  4. ---------- -------------------- --------------------   
  5.         10 Sales                Virginia  
  6.         20 Accounting           Virginia  
  7.         30 Consulting           Virginia  
  8.         40 Finance              Virginia  

查看demo1.log日志文件

  1. [oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ cat demo1.log   
  4.   
  5. SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:39:54 2011  
  6.   
  7. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  8.   
  9. 控制文件:      demo1.ctl  
  10. 数据文件:      demo1.ctl  
  11.   错误文件:    demo1.bad  
  12.   废弃文件:    未作指定  
  13.    
  14. (可废弃所有记录)  
  15.   
  16. 要加载的数: ALL  
  17. 要跳过的数: 0  
  18. 允许的错误: 50  
  19. 绑定数组: 64 行, 最大 256000 字节  
  20. 继续:    未作指定  
  21. 所用路径:       常规  
  22.   
  23. 表 DEPT,已加载从每个逻辑记录  
  24. 插入选项对此表 INSERT 生效  
  25.   
  26.    列名                        位置      长度  中止 包装数据类型  
  27. ------------------------------ ---------- ----- ---- ---- ---------------------   
  28. DEPTNO                              FIRST     *   ,       CHARACTER              
  29. DNAME                                NEXT     *   ,       CHARACTER              
  30. LOC                                  NEXT     *   ,       CHARACTER              
  31.   
  32.   
  33. 表 DEPT:  
  34.   4 行 加载成功。  
  35.   由于数据错误, 0 行 没有加载。  
  36.   由于所有 WHEN 子句失败, 0 行 没有加载。  
  37.   由于所有字段都为空的, 0 行 没有加载。  
  38.   
  39.   
  40. 为绑定数组分配的空间:                 49536 字节 (64 行)  
  41. 读取   缓冲区字节数: 1048576  
  42.   
  43. 跳过的逻辑记录总数:          0  
  44. 读取的逻辑记录总数:             4  
  45. 拒绝的逻辑记录总数:          0  
  46. 废弃的逻辑记录总数:        0  
  47.   
  48. 从 星期二 10月 04 18:39:54 2011 开始运行  
  49. 在 星期二 10月 04 18:39:54 2011 处运行结束  
  50.   
  51. 经过时间为: 00: 00: 00.68  
  52. CPU 时间为: 00: 00: 00.07  

2.控制文件和数据文件分开

继续使用前面的dept表,首先创建一个控制文件和一个数据文件

  1. [oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ cat demo2.ctl   
  4. load data  
  5. infile demo2.data  
  6. append into table dept  
  7. fields terminated by ','  
  8. (deptno,dname,loc)  
  9. [oracle@linux sqlldr]$ cat demo2.data   
  10. 50,Sales,Virginia  
  11. 60,Accounting,Virginia  
  12. 70,Consulting,Virginia  
  13. 80,Finance,Virginia  

然后在命令行执行加载

  1. [oracle@linux sqlldr]$ sqlldr userid=ing/ing control=demo2.ctl   
  2.   
  3. SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:47:23 2011  
  4.   
  5. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  6.   
  7. 达到提交点 - 逻辑记录计数 4  

最后查看dept表

  1. SQL> select * from dept;  
  2.   
  3.     DEPTNO DNAME                LOC  
  4. ---------- -------------------- --------------------   
  5.         10 Sales                Virginia  
  6.         20 Accounting           Virginia  
  7.         30 Consulting           Virginia  
  8.         40 Finance              Virginia  
  9.         50 Sales                Virginia  
  10.         60 Accounting           Virginia  
  11.         70 Consulting           Virginia  
  12.         80 Finance              Virginia  
  13.   
  14. 已选择8行。  

3.sql*loader简要说明

注意:下面代码左边加括号的数并不是控制文件的一部分,只是为了方便显示。

(1)LOAD DATA
(2)INFILE *
(3)INTO TABLE DEPT
(4)FIELDS TERMINATED BY ','
(5)(DEPTNO,DNAME,LOC)
(6)BEGINDATA
(7)10,Sales,Virginia
(8)20,Accounting,Virginia
(9)30,Consulting,Virginia
(10)40,Finance,Virginia
(1):这会告诉sqlldr要做什么,上面的例子指示要加载数据。
(2):*是指要加载所有的数据(例子1),也可以直接指定数据文件的名字(例子2)。
(3):这会告诉sqlldr要加载到哪个表中。完整语法:[insert | append | replace | truncate] into table dept     insert - 默认就是insert,后面的dept表必须的空的;append  - 是追加,后面的dept表可以不为空;replace - 是先delete然后在insert;truncate - 是先truncate再insert。
(4):是告诉sqlldr以逗号分隔值。
(5):是告诉sqlldr数据要加载到对应的列中。
(6):是告诉sqlldr要加载的数据开始了。
(7)~(10):是要被加载的具体的数据。

  • 1
  • 2
  • 3
  • 下一页

相关内容