SQL*Loader原理

 

SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高。其示意图如下:

控制文件(Control File) (.ctl):用于控制数据导入的行为方式的文件(最重要的文件)

参数文件(可选)(Parameter File) (.par):可以把参数直接写在控制文件里,也可以单独写一个参数文件

数据文件(Data Files) :放置源数据的平面文件(可以一次性导入多个数据文件)

坏文件(Bad File) (.bad):在数据加载时,把无法正确加载的数据放入错误文件中(比如数据格式、数据类型问题等)

丢弃文件(可选)(Discard File) (.dsc):有些数据,虽然数据格式、数据类型没有问题,但它被逻辑条件过滤掉了(由控制文件WHEN设置),会被放入丢失文件

日志文件(Log File) (.log):记录SQL*Loader的数据加载过程

SQL*Loader的数据加载方式

 
SQL*Loader支持3种数据加载方式,分别是:
  • 传统路径加载(direct=false):等同于insert语句
  • 直接路径加载(direct=true):绕过SGA,把数据直接导入高水位线(HWM)以上,可设置并行加载,性能比传统路径加载更高,但限制也更多
  • 外部表加载(较少用):先为数据文件上创建一个外部表,然后再把数据从外部表insert到目标表中
 

数据文件的记录格式

 
从SQL*Loader的角度来看,数据文件里的数据是以记录组织的,分为以下三种记录格式(由控制文件的INFILE参数设置):
 
定长记录格式
这种方式灵活性最差,但性能却最好,它的语法如下:
INFILE datafile_name "fix n"

表示数据文件里的每个记录定长为n个字节。

 
变长记录格式
INFILE "datafile_name" "var n"

变长记录分为两个部分:记录长度和记录本身,看下面这个例子:

load data
infile 'example.dat' "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7)) example.dat:
009hello,cd,010world,im,
012my,name is,

var 3 表示记录长度为3个字节,紧跟其后的就是记录本身,上例中,第一个记录长度为9个字节(009),值为其后的9个字节(hello,cd,);第二个记录长度为10个字节(010),值为其后的10个字节(world,im,\n),\n表示第一行行尾的换行符;以此类推。

 
流记录格式
这是最常用也是默认的记录格式,记录以分隔符分开,其语法如下:
INFILE datafile_name ["str terminator_string"]
分隔符分为两种:
1. 'char_string':用单引号或双引号扩起来的字符串
2.X'hex_string':十六进制的字节字符串。

默认的分隔符为换行符'\n',即每行为一个记录。

 

[Oracle] SQL*Loader 详细使用教程(1)- 总览的更多相关文章

  1. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

    sqlldr工具   SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...

  2. [Oracle] SQL*Loader 详细使用教程(3)- 控制文件

    控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置.数据的格式.以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件.   在控制文件里配置 ...

  3. [Oracle] SQL*Loader 详细使用教程(4)- 字段列表

    在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子 ...

  4. [Oracle] SQL*Loader 详细使用教程(5)- 典型例子

    本文介绍SQL*Loader在实际使用过程中经常用到的典型例子. 1. 表中的列比数据文件的列要少怎么办? 假设一个csv的文件如下: a1,a2,a3,a4 b1,b2,b3,b4 c1,c2,c3 ...

  5. [Oracle] Data Pump 详细使用教程(4)- network_link

    [Oracle] Data Pump 详细使用教程(1)- 总览 [Oracle] Data Pump 详细使用教程(2)- 总览 [Oracle] Data Pump 详细使用教程(3)- 总览 [ ...

  6. [Oracle] Data Pump 详细使用教程(5)- 命令交互模式

    [Oracle] Data Pump 详细使用教程(1)- 总览 [Oracle] Data Pump 详细使用教程(2)- 总览 [Oracle] Data Pump 详细使用教程(3)- 总览 [ ...

  7. Oracle Sql Loader的学习使用

    最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看.点击 这里 查看详细 1,概述: Sql Loader: 一个批量工具,将文件数据导入到数据库.可以导入一个 ...

  8. Oracle SQL Loader

    C:/Documents and Settings/WWJD>sqlldr SQL :: Copyright (c) , , Oracle. All rights reserved. 用法: S ...

  9. Oracle SQL*Loader commit point tips

    http://www.dba-oracle.com/t_sql_loader_commit_frequency.htm - Question:  Can I control the commit fr ...

随机推荐

  1. python(2)-函数相关

    可变参数 def enroll(name, gender, age=6, city='Beijing'): print 'name:', name print 'gender:', gender pr ...

  2. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  3. web页面隐藏鼠标

    Java web项目需求需要做一个在页面中,鼠标隐藏,来浏览页面,让客户不能点金页面 重要代码: $('*').css('cursor','none!important'); 示例: <styl ...

  4. 盒模型中--border

    三要素:宽border-width,形状border-style,颜色border-color <style> div{ width:300px; height:300px; backgr ...

  5. Java中Native关键字的作用

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个native呢?这是我所要学 ...

  6. Struts(七):action配置文件之通配符映射

    通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系. 通配符映射规则: 若找到多个匹配,没有通配符的那个将胜 ...

  7. C# 实现 微软WebRequestMethods.Ftp类中的FTP操作功能

    先奉献一个测试地址,ftp内的文件请勿删除,谢谢 FtpEntity fe = "); 由于代码量较多,只抽出一部分,详细代码请移步  ftp://wjshan0808.3vhost.net ...

  8. 原生的on事件代理

    <script> // jQuery $('.el').on('event', function() { }); // 原生方法 [].forEach.call(document.quer ...

  9. html5中的beginPath与stroke

    名词解释: 定义和用法 beginPath() 方法在一个画布中开始子路径的一个新的集合. 语法 beginPath() 描述 beginPath() 丢弃任何当前定义的路径并且开始一条新的路径.它把 ...

  10. HTML 5 Canvas 参考手册

    HTML 5 Canvas 参考手册 HTML 视频/音频 HTML 文档类型 描述 HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript). 不过,&l ...