Welcome 微信登录

首页 / 数据库 / MySQL / 使用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):是要被加载的具体的数据。

4.常见的一些问题如何加载特殊字符(引号)
  1. [oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ cat demo3.ctl   
  4. LOAD DATA  
  5. INFILE *  
  6. REPLACE INTO TABLE DEPT  
  7. FIELDS TERMINATED BY ","OPTIONALLY ENCLOSED BY """  
  8. (DEPTNO,DNAME,LOC)  
  9. BEGINDATA  
  10. 10,Sales,"Virginia,USA"  
  11. 20,Accounting,"VS,""USA"""  
  12. 30,Consulting,Virginia  
  13. 40,Finance,Virginia  
  14. [oracle@linux sqlldr]$ sqlldr ing/ing control=demo3.ctl   
  15.   
  16. SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 19:36:52 2011  
  17.   
  18. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  19.   
  20. 达到提交点 - 逻辑记录计数 4  
查询结果
  1. SQL> select * from dept;  
  2.   
  3.     DEPTNO DNAME                LOC  
  4. ---------- -------------------- --------------------   
  5.         10 Sales                Virginia,USA  
  6.         20 Accounting           VS,"USA"  
  7.         30 Consulting           Virginia  
  8.         40 Finance              Virginia  
说明:部门10中的Virginia,USA:这是因为数据是"Virginia,USA"。输入数据字段必须包括在括号里才能保留数据中的逗号。VS,"USA":这是因为输入数据是"VS,""USA"""。对于括号引起的字符串,两次“记为一次出现。如何加载固定格式数据
  1. [oracle@linux sqlldr]$ pwd  
  2. /u01/sqlldr  
  3. [oracle@linux sqlldr]$ cat demo4.ctl   
  4. LOAD DATA  
  5. INFILE *  
  6. INTO TABLE DEPT  
  7. REPLACE  
  8. (DEPTNO POSITION(1:2),  
  9.  DNAME POSITION(3:12),  
  10.  LOC POSITION(13:20))  
  11. BEGINDATA  
  12. 10Sales     Virginia  
  13. 20AccountingVirginia  
  14. 30ConsultingVirginia  
  15. 40Finance   Virginia  
  16. [oracle@linux sqlldr]$ sqlldr ing/ing control=demo4.ctl   
  17.   
  18. SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 19:45:56 2011  
  19.   
  20. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  21.   
  22. 达到提交点 - 逻辑记录计数 4  
查看
  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  
说明:上面控制文件中的(DEPTNO POSITION(1:2), DNAME POSITION(3:12), LOC POSITION(13:20))还可以改为(DEPTNO POSITION(1:2), DNAME POSITION(*:12), LOC POSITION(*:20))效果是一样的。前者是绝对位置,后者是相对位置。
  • 1
  • 2
  • 下一页
Oracle在NOARCHIVELOG模式下冷备份还原数据库Oracle外部表相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数