SQL*Loader是加载数据的主流方法
传统路径:SQLLDR会利用SQL插入的方式加载数据
直径路径:直接格式化数据块

从一个平面文件读取数据,并将其直接写至格式化的数据库块,而绕开整个SQL引擎,同时还能避免redo、undo的生成。要在一个没有任何数据的数据库中充分加载数据,最快的方法就是采用并行直接路径加载

外部表:允许访问操作系统文件,就好像它们是数据库表一样

数据卸载技术

平面文件卸载(flat file unload)
数据泵卸载(data pump unload)

实验1

文件路径
[oracle@node1 mysqlldr]$ pwd
/home/oracle/mysqlldr
[oracle@node1 mysqlldr]$ ll
total 16
-rw-r--r-- 1 oracle oinstall   76 Jul 22 09:53 afiedt.buf
-rw-r--r-- 1 oracle oinstall  173 Jul 22 09:56 demo1.ctl
-rw-r--r-- 1 oracle oinstall 1611 Jul 22 09:57 demo1.log
-rw-r--r-- 1 oracle oinstall  111 Jul 22 09:47 dept.sql配置文件demo1.ctl
[oracle@node1 mysqlldr]$ cat demo1.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO,DNAME,LOC)
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia
[oracle@node1 mysqlldr]$创建表脚本
[oracle@node1 mysqlldr]$ cat dept.sql
create table dept
(deptno number(2) constraint dept_pk primary key,
dname varchar2(14),
loc   varchar2(13)
)
/执行命令
sqlldr userid=alex/alex control=/home/oracle/mysqlldr/demo1.ctl

实验2

配置文件中第四条记录的最后一个字段有很多的字符
[oracle@node1 mysqlldr]$ cat demo2.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO,DNAME,LOC)
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more清空之前插入的数据
ALEX@devdb1 >truncate table dept;执行命令
[oracle@node1 mysqlldr]$ sqlldr userid=alex/alex control=/home/oracle/mysqlldr/demo2.ctl在demo2.log中出现了exceeds maximum length 最大长度不够
[oracle@node1 mysqlldr]$ cat demo2.logColumn Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO                              FIRST     *   ,       CHARACTER
DNAME                                NEXT     *   ,       CHARACTER
LOC                                  NEXT     *   ,       CHARACTERRecord 4: Rejected - Error on table DEPT, column LOC.
Field in data file exceeds maximum lengthTable DEPT:3 Rows successfully loaded.1 Row not loaded due to data errors.0 Rows not loaded because all WHEN clauses were failed.0 Rows not loaded because all fields were null.数据只成功加载3条,最后一条没有成功
ALEX@devdb1 >select * from dept;DEPTNO DNAME                                      LOC
---------- ------------------------------------------ ---------------------------------------10 Sales                                      Virginia20 Accounting                                 Virginia30 Consulting                                 Virginiademo2.bad文件中记录了加载失败的数据
[oracle@node1 mysqlldr]$ cat demo2.bad
40,Finance,Virginia text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more修改控制文件demo2.ctl,将char默认的255扩展到1000
[oracle@node1 mysqlldr]$ cat demo2.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO,DNAME ,LOC char(1000))
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text moretext more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text more text moretext more text more text more text more更改表dept的字段loc为varchar2(1000)
ALEX@devdb1 >alter table dept modify loc varchar2(1000);Table altered.ALEX@devdb1 >desc dept;Name                                      Null?    Type----------------------------------------- -------- ----------------------------DEPTNO                                    NOT NULL NUMBER(2)DNAME                                              VARCHAR2(14)LOC                                                VARCHAR2(1000)

清空表后重新加载

truncate table dept;$ sqlldr userid=alex/alex control=/home/oracle/mysqlldr/demo2.ctl

验证结果插入成功

select * from dept;DEPTNO DNAME
---------- ------------------------------------------
LOC
--------------------------------------------------------------------------------10 Sales
Virginia20 Accounting
Virginia30 Consulting
VirginiaDEPTNO DNAME
---------- ------------------------------------------
LOC
--------------------------------------------------------------------------------40 Finance
Virginia text more text more text more text more text more text more text more t
ext more text more text more text more text more text more text more text more t
ext moretext more text more text more text more text more text more text more te
xt more text more text more text more text more text more text more text more te
xt more text more text more text more text moretext more text more text more tex
t more text more text more text more text moretext more text more text more textmore text m
ore text more text more text more text more text more text more textmore text more text more text more text more text more text more text more textDEPTNO DNAME
---------- ------------------------------------------
LOC
--------------------------------------------------------------------------------more text more text more text more text more text more text more text more textmoretext more text more text more text more

实验3

配置文件中加入选项“ ”区域中代表一个完整的字段,可忽略其中的,号。

如果字段中含有”,需要用”“来替代
[oracle@node1 mysqlldr]$ cat demo3.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,DNAME,LOC)
BEGINDATA
10,Sales,"Virginia,USA"
20,Accounting,"Va,""USA"""
30,Consulting,Virginia
40,Finance,VirginiaALEX@devdb1 >select * from dept;DEPTNO DNAME      LOC
---------- ---------- --------------------10 Sales      Virginia,USA   <===字段中包含分隔符 , 20 Accounting Va,”USA”    <===字段中包含” 30 Consulting Virginia40 Finance    Virginia

实验4 使用FILLER参数来过滤掉不需要的列

[oracle@node1 mysqlldr]$ cp demo3.ctl demo4.ctl
[oracle@node1 mysqlldr]$ vi demo4.ctlLOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,DNAME,LOC,dummy1 filler)
BEGINDATA
10,Sales,"Virginia,USA",haha
20,Accounting,"Va,""USA""",haha
30,Consulting,Virginia,haha
40,Finance,Virginia,hahatruncate table dept;sqlldr userid=alex/alex control=/home/oracle/mysqlldr/demo4.ctl[oracle@node1 mysqlldr]$ cat demo4.logColumn Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO                              FIRST     *   ,  O(") CHARACTER
DNAME                                NEXT     *   ,  O(") CHARACTER
LOC                                  NEXT     *   ,  O(") CHARACTER
DUMMY1                               NEXT     *   ,  O(") CHARACTER           (FILLER FIELD)[oracle@node1 mysqlldr]$ sqlplus alex/alexALEX@devdb1 >select * from dept;DEPTNO DNAME           LOC
---------- --------------- ---------------10 Sales           Virginia,USA20 Accounting      Va,"USA"30 Consulting      Virginia40 Finance         Virginia

实验5 日期类型的加载

ALEX@devdb1 >alter table dept add last_updated date;Table altered.ALEX@devdb1 >desc dept;Name                                      Null?    Type----------------------------------------- -------- ----------------------------DEPTNO                                    NOT NULL NUMBER(2)DNAME                                              VARCHAR2(14)LOC                                                VARCHAR2(1000)LAST_UPDATED                                       DATE[oracle@node1 mysqlldr]$ cat demo5.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,DNAME,LOC,LAST_UPDATED date 'yyyy-mm-dd')
BEGINDATA
10,Sales,Virginia,2014-05-01
20,Accounting,"Va,""USA""",2014-06-03
30,Consulting,Virginia,2014-07-22
40,Finance,Virginia,2014-07-23[oracle@node1 mysqlldr]$ sqlldr userid=alex/alex control=/home/oracle/mysqlldr/demo5.ctlcol dname for a15
col loc for a15select * from dept;DEPTNO DNAME           LOC             LAST_UPDATED
---------- --------------- --------------- -------------------10 Sales           Virginia        2014/05/01 00:00:0020 Accounting      Va,"USA"        2014/06/03 00:00:0030 Consulting      Virginia        2014/07/22 00:00:0040 Finance         Virginia        2014/07/23 00:00:00

实验6 函数加载

[oracle@node1 mysqlldr]$ cat demo6.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
(DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc),
LAST_UPDATED date 'yyyy-mm-dd')
BEGINDATA
10,Sales,Virginia,1998-09-01
20,Accounting,Virginia,2002-08-09
30,Consulting,Virginia,2008-08-08
40,Finance,Virginia,2014-06-03[oracle@node1 mysqlldr]$ sqlldr userid=alex/alex control=demo6.ctl
ALEX@devdb1 >select * from dept;DEPTNO DNAME           LOC             LAST_UPDATED
---------- --------------- --------------- -------------------10 SALES           VIRGINIA        1998/09/01 00:00:0020 ACCOUNTING      VIRGINIA        2002/08/09 00:00:0030 CONSULTING      VIRGINIA        2008/08/08 00:00:0040 FINANCE         VIRGINIA        2014/06/03 00:00:00

本文转自ICT时空 dbasdk博客,原文链接: SQL*Loader 笔记 (一) 热身练习,如需转载请自行联系原博主。

SQL*Loader 笔记 (一) 热身练习相关推荐

  1. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  2. Oracle SQL Loader的详细语法

    Oracle   SQL   Loader的详细语法 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据 仓库选择使用的 ...

  3. linux oracle path恢复,Linux 环境下Oracle安装与调试(七)之SQL Loader,备份和恢复

    1.SQL Loader sql loader其实就是 把数据文件的数据插入到oracle数据表中. sql*loader 使用格式如下: sqlldr userid control data 也就是 ...

  4. sql loader 导入数据时的问题

    2019独角兽企业重金招聘Python工程师标准>>> 在使用oracle sql loader 工具导入数据时遇到的问题,具体的shell脚本如下: #!/bin/bashexpo ...

  5. SQL Loader 的使用详解

    Oracle 的SQL*LOADER可以将外部数据加载到数据库表中.下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个数据文件的数据 2)可装入固定格式,自由定界以及可度长格式的 ...

  6. 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)

    Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...

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

    Oracle教程:使用SQL*Loader高速批量数据加载工具 1.控制文件中包含要加载的数据 首先创建一张测试表 然后创建一个控制文件(其中包含被加载的数据) 然后在命令行执行加载 查看dept表 ...

  8. java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)

    一.简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIREC ...

  9. SQL*Loader之CASE8

    CASE8 1. SQL脚本 [oracle@node3 ulcase]$ cat ulcase8.sql set termout offrem host write sys$output " ...

最新文章

  1. python全栈学习--day40()
  2. 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )
  3. 这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了
  4. mysql数据库事务_MySQL数据库的事务管理
  5. 【SICP练习】127 练习3.58
  6. java精确测量文本高度_基于文本精确计算UITableViewCell的高度
  7. 软件工程结构化建模的方法和工具_软件工程系列-结构化设计方法2
  8. work节点使用外部包_AFLSmart工具简单分析及使用介绍
  9. js把base64串解析成中文_26日大嘴足球:晚场5中3/中2串+1比分,早场(意甲+西甲)2场解析!!...
  10. 如何使用JS来开发室内地图商场停车场车位管理系统
  11. 重装系统Win10电脑磁盘被写保护怎么办
  12. 使用ADO.NET轻松操纵数据库(二)
  13. Scala 按名称传递参数 by-name parameter
  14. 利用过滤器防止XSS攻击
  15. 俞敏洪:度过有意义的生命(转)
  16. [转]XXX无法访问。你可能没有权限使用网络资源
  17. 【其实是空空荡荡的牵挂,没有结局的怀念】
  18. python怎么发送post_python发送post的方法
  19. 微信小程序踩坑—用户登录界面
  20. 微信小程序点击按钮弹出弹窗_微信小程序自定义弹窗(可通用)

热门文章

  1. error: #5: cannot open source input file core_cm3.h: No such file or directory
  2. z = x++ - --y * b/a;
  3. crackme之018
  4. 数据结构: 顺序存储二叉树
  5. Netty和RPC框架线程模型分析
  6. JVM学习之GC常用算法
  7. 散记 ~ 2016-09-23
  8. ubuntu14中 memcached安装与使用
  9. R有序因子和无序因子(4)
  10. [导入]关于DataGrid等控件中的自动编号