1.  sql*loader

将外部数据(比如文本型)数据导入 oracle database。(用于数据导入不同类型数据库数据迁移

2.  sql*loader 导入数据原理:在段(segment 表)insert 记录

1) conventional:将记录插入到 segment 的 HWM(高水位线)以下的块,   要首先访问 bitmap,来确定那些 block 有 free space

2)   direct path:将记录插入到 segment 的 HWM(高水位线)以上的从未使用过的块,绕过 db_buffer,不检查约束。还可以关闭 redo,  也支持并行操作,加快插入速度

例:

SQL> create table emp1 as select * from emp where 1=2;

SQL> insert into emp1 select * from emp;          ///conventional 方式插入数据

SQL> insert /*+ APPEND */ into emp1 select * from emp;         ///direct path方式 插入数据,    必须 commit 后才能查看数据

3 sql*loader 用法

SQLLDR keyword=value [,keyword=value,...]

看帮助信息

$/u01/oracle/bin/sqlldr(回车)。如果要使用 direct path 方式,   在命令行中使用关键字 direct=TRUE

sql*loader 与 data dump 的一个区别

data dump 只能读取由它导出的文件,    而 sql*loader 可以读取任何它能解析的第三方文件格式

4 例子

1)模拟生成数据源

SQL> select empno||','||ename||','||job||','||mgr||','||hiredate||','||sal||','||comm||','|| deptno from scott.emp;

EMPNO||','||ENAME||','||JOB||','||MGR||','||HIREDATE||','||SAL||','||COMM||','|| DEPTNO

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30 7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20 7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30 7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30 7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10 7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20 7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10 7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30 7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20 7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30 7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20 7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10

2)建个目录

[oracle@timran]$mkdir -p /home/oracle/sqlload

[oracle@timran]$cd /home/oracle/sqlload

[oracle@timran sqlload]$vi emp.dat      ----生成平面表

--------查看数据源

[oracle@timran sqlload]$ more emp.dat

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30 7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20 7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30 7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30 7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10 7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20 7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10 7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30 7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20 7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30 7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20 7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10

3)conventional 方式导入

建立控制文件

[oracle@work sqlldr]$ vi emp.ctl
load data
infile '/home/oracle/sqlload/emp.dat'
insert     --insert 插入表必须是空表,非空表用 append
into table emp1
fields terminated by ','
optionally enclosed by '"'
( empno, ename, job, mgr, hiredate, comm, sal, deptno)

[oracle@single06 sqlload]$ ll
total 8
-rw-r--r-- 1 oracle oinstall 178 Dec 15 13:50 emp.ctl
-rw-r--r-- 1 oracle oinstall 606 Dec 15 13:43 emp.dat

4)在 scott 下建立 emp1 表(内部表),只要结构不要数据

SQL> conn scott/scott

SQL> create table emp1 as select * from emp where 1=2;      ///不需要数据,只需要表结构

5)执行导入(normal)

[oracle@single06 sqlload]$ sqlldr scott/scott control=emp.ctl log=emp.logSQL*Loader: Release 11.2.0.4.0 - Production on Wed Dec 15 14:00:32 2021Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Commit point reached - logical record count 15

6)验证: 11:07:12 SQL> 11:07:12 SQL> select count(*) from scott.emp1;

上例的另一种形式是将数据源和控制文件合并在.ctl 里描述

[oracle@work sqlldr]$ vi emp02.ctl
load data
infile *
append
into table emp1
fields terminated by ','
optionally enclosed by '"'
(
empno,
ename,
job,
mgr,
hiredate,
comm,
sal,
deptno)
begindata
7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
[oracle@single06 sqlload]$ sqlldr scott/scott control=emp02.ctl log=emp02.logSQL*Loader: Release 11.2.0.4.0 - Production on Wed Dec 15 14:27:49 2021Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Commit point reached - logical record count 14

验证:

SQL> select count(*) from scott.emp1;

COUNT(*)
----------
        28

五、sqloader相关文件说明

1.日志:

[oracle@single06 sqlload]$ cat emp.logSQL*Loader: Release 11.2.0.4.0 - Production on Wed Dec 15 15:11:37 2021Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Control File:   emp.ctl
Data File:      /home/oracle/sqlload/emp.datBad File:     emp.badDiscard File:  none specified(Allow all discards)Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      ConventionalTable EMP1, loaded from every logical record.
Insert option in effect for this table: INSERTColumn Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                               FIRST     *   ,  O(") CHARACTER
ENAME                                NEXT     *   ,  O(") CHARACTER
JOB                                  NEXT     *   ,  O(") CHARACTER
MGR                                  NEXT     *   ,  O(") CHARACTER
HIREDATE                             NEXT     *   ,  O(") CHARACTER
COMM                                 NEXT     *   ,  O(") CHARACTER
SAL                                  NEXT     *   ,  O(") CHARACTER
DEPTNO                               NEXT     *   ,  O(") CHARACTERRecord 15: Rejected - Error on table EMP1, column EMPNO.
Column not found before end of logical record (use TRAILING NULLCOLS)Table EMP1:14 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.Space allocated for bind array:                 132096 bytes(64 rows)
Read   buffer bytes: 1048576Total logical records skipped:          0
Total logical records read:            15
Total logical records rejected:         1
Total logical records discarded:        0Run began on Wed Dec 15 15:11:37 2021
Run ended on Wed Dec 15 15:11:37 2021Elapsed time was:     00:00:00.11
CPU time was:         00:00:00.01

[oracle@single06 sqlload]$ ll
-rw-r--r-- 1 oracle oinstall    1 Dec 15 15:11 emp.bad      ///为坏块,未成功输入数据库的数据
-rw-r--r-- 1 oracle oinstall  178 Dec 15 13:50 emp.ctl         ///控制文件
-rw-r--r-- 1 oracle oinstall  606 Dec 15 13:43 emp.dat      ///原始数据
-rw-r--r-- 1 oracle oinstall 2087 Dec 15 15:11 emp.log     ///加载日志

笔记系列------sqlloader的使用相关推荐

  1. SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引

    SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn  ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...

  2. 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1

    <ASP.NET Core In Action>读书笔记系列五 ASP.NET Core 解决方案结构解析1 参考文章: (1)<ASP.NET Core In Action> ...

  3. [老男孩笔记系列]-之linux定时任务crontab命令详解

    linux定时任务crontab命令详解 1.1指令语法 crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e } 1.2指令说明 通 ...

  4. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

  5. NJ4X源码阅读分析笔记系列(一)——项目整体分析

    NJ4X源码阅读分析笔记系列(一)--项目整体分析 NJ4X是什么 参见NJ4X的官网:http://www.nj4x.com/ Java and .Net interfaces to support ...

  6. SQLServer学习笔记系列2

    SQLServer学习笔记系列2 一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继 ...

  7. Hadoop学习笔记系列文章导航

    一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...

  8. 《C#高级编程》笔记系列第一弹-开篇

    虽然以前做过的C#项目也不少了,做过ASP.NET的BS架构的,也做过Winform的CS架构.有一天一位同事给我们看了下面的一个简单的Demo:     public class MainTest ...

  9. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  10. 深度学习入门笔记系列(三)——感知器模型和 tensorboard 的使用方法

    本系列将分为 8 篇 .今天是第三篇 .主要讲讲感知器模型和 tensorboard 的基本使用方法 . 1. 感知器模型 因为小詹之前写过一篇感知器模型的介绍 ,这里就不赘述了 .有需要巩固的点击如 ...

最新文章

  1. 此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
  2. docker逃逸漏洞复现 cve-2019-5736
  3. 【PP模块】订单分割(Order Split)
  4. String类型的字符长度(码点/代码单元的区别)
  5. 数学--数论--HDU 2582 F(N) 暴力打表找规律
  6. 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 安装配置及测试
  7. linux进程上下文切换,Linux 性能分析总结之 CPU 上下文切换(二)
  8. c语言 条件编译注释,c语言的预处理/条件编译,最全整理看这里
  9. 美国参议院紧急通过关键基础设施网络安全法案
  10. datepick二格式 化时间_同样是持久化,竟然有这么大的差别
  11. 洛谷P3378 【模板】堆
  12. 在字节跳动实习的真实感受究竟如何?
  13. 关于Mariadb数据库 配置
  14. w8服务器dns修改,怎么修改DNS Win8修改DNS服务器地址的具体步骤图解
  15. 伤害世界服务器连接失败_伤害世界服务器怎么架设_伤害世界服务器架设图文教程_玩游戏网...
  16. playbook中的block rescue always
  17. 【毕业设计】深度学习卫星遥感图像检测与识别系统(目标检测)
  18. 数据结构——栈的使用
  19. 敏涵控股集团贵族私人定制:时尚最C位 懂精致 更懂生活
  20. 纸老虎【PATB1070】结绳 (25 分)

热门文章

  1. 器械传递的方法_天津304不锈钢传递窗报价_碧海云天
  2. tqdm的版本问题导致tensorflow_datasets无法加载
  3. [看过不再忘]详细解析chmod修改文件权限
  4. linux删除蓝色文件夹,linux删除文件报错
  5. 关于python注释下面选项描述错误的是_关于Python的列表,以下选项中描述错误的是______...
  6. 帮忙做c语言作业,c语言..题目.帮忙做一下
  7. C++读写ini配置文件
  8. 全站最全实战的Java项目(附源码)
  9. 电商网站项目总结(面向对象编程篇)
  10. 前端FISH框架学习笔记