SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。现在,我们抛开其理论不谈,用实例来使您快速掌握SQL*LOADER的使用方法。
  首先,我们认识一下SQL*LOADER。
  在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。
  如执行:d:\oracle>sqlldr
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 11:06:42 2002
(c) Copyright 1999 Oracle Corporation.   All rights reserved.

用法: SQLLOAD 关键字 = 值 [,keyword=value,...]
有效的关键字:
     userid -- ORACLE username/password
     control -- Control file name(控制文件)
     log -- Log file name(记录的日志文件)
     bad -- Bad file name(坏数据文件)
     data -- Data file name(数据文件)
     discard -- Discard file name(丢弃的数据文件)
     discardmax -- Number of discards to allow(允许丢弃数据的最大值)  (全部默认)
     skip -- Number of logical records to skip   (默认0)
     load -- Number of logical records to load   (全部默认)
     errors -- Number of errors to allow(允许的错误记录数)(默认50)
     rows -- Number of rows in conventional path bind array or between direct path data saves
               (每次提交的记录数,默认: 常规路径 64, 所有直接路径)
     bindsize -- Size of conventional path bind array in bytes(默认65536)
                        (每次提交记录的缓冲区的大小(字节为单位,默认256000))
     silent -- Suppress messages during run (header,feedback,errors,discards,partitions)(禁止输出信息)
     direct -- use direct path (使用直通路径方式导入)                    (默认FALSE)
     parfile -- parameter file: name of file that contains parameter specifications
     parallel -- do parallel load   (并行导入)                 (默认FALSE)
     file -- File to allocate extents from
            (与bindsize成对使用,其中较小者会自动调整到较大者sqlldr先计算单条记录长度,乘以rows,如小bindsize     不           会rows以填充bindsize;如超出,则以bindsize为准。)
     skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默认FALSE)
     skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(默认FALSE)
     commit_discontinued -- commit loaded rows when load is discontinued(默认FALSE)
     readsize -- Size of Read buffer                 (默认1048576)
PLEASE NOTE: 命令行参数可以由位置或关键字指定。
前者的例子是 'sqlload scott/tiger foo';后者的例子是 'sqlload control=foo userid=scott/tiger'.位置指定参数的时间必须早于但不可迟于由关键字指定的参数。例如,
'SQLLOAD SCott/tiger control=foo logfile=log', 但'不允许 sqlload scott/tiger control=foo log',即使允许
参数 'log' 的位置正确。
d:\oracle>
     我们可以从中看到一些基本的帮助信息,这里,我用到的是中文的WIN2000 ADV SERVER。
  我们知道,SQL*LOADER只能导入纯文本,所以我们现在开始以实例来讲解其用法。
  一、已存在数据源result.csv,欲倒入ORACLE中FANCY用户下。
    result.csv内容:
  1,默认 Web 站点,192.168.2.254:80:,RUNNING
  2,other,192.168.2.254:80:test.com,STOPPED
  3,third,192.168.2.254:81:thirdabc.com,RUNNING
  从中,我们看出4列,分别以逗号分隔,为变长字符串。
  二、制定控制文件result.ctl
             

命令

说明

load data ..........    控制文件标识

infile 'model.txt' ............  要输入的数据文件名为test.txt

append into table system.表名 ............ 向表test中追加记录

fields terminated by X'09'   .......        指定分隔符,字段终止于X'09',是一个制表符(TAB)

(编号,名称,大小)  ......... 定义列对应表中顺序


        如下实例 result.ctl内容:
       load data
       infile 'result.csv'
       into table resultxt
       fields terminated by ','
       TRAILING   NULLCOLS..........表示如表的字段没有对应的值时允许为空。
       (resultid POSITION(1:8),
        website ,
        ipport char terminated by ',',
        status char terminated by whitespace)
  说明:
  infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc   badfile   result.bad
  into table resultxt 默认是INSERT,也可以into table resultxt APPEND为追加方式,或REPLACE
  terminated by ',' 指用逗号分隔
  terminated by whitespace 结尾以空白分隔

控制文件中指定插入数据的方式关键字

l         insert,为缺省方式,在数据装载开始时要求表为空

l         append,在表中追加新记录

l         replace,删除旧记录,替换成新装载的记录

l         truncate,同上

position(m:n)表示该字段是从位置m到位置n。

  三、此时我们执行加载:
                D:\>sqlldr userid=fancy/testpass control=result.ctl log=resulthis.out
                SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:25:42 2002
                (c) Copyright 1999 Oracle Corporation.   All rights reserved.
                SQL*Loader-941:   在描述表RESULTXT时出现错误
                ORA-04043: 对象 RESULTXT 不存在
          提示出错,因为数据库没有对应的表。
  四、在数据库建立表
             create table resultxt
               (resultid varchar2(500),
                website varchar2(500),
                ipport varchar2(500),
                status varchar2(500))

  五、重新执行加载
          D:\>sqlldr userid=fancy/k1i7l6l8 control=result.ctl log=resulthis.out
               SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
               (c) Copyright 1999 Oracle Corporation.   All rights reserved.
               达到提交点,逻辑记录计数2
               达到提交点,逻辑记录计数3
         已经成功!我们可以通过日志文件来分析其过程:resulthis.out内容如下:
               SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
               (c) Copyright 1999 Oracle Corporation.   All rights reserved.
               控制文件: result.ctl
               数据文件: result.csv
               错误文件: result.bad
               废弃文件: 未作指定(可废弃所有记录)
               装载数: ALL
               跳过数: 0
               允许的错误: 50
               绑定数组: 64 行,最大 65536 字节
               继续:     未作指定
               所用路径:        常规
               表RESULTXT
              已载入从每个逻辑记录
              插入选项对此表INSERT生效
    列名                         位置       长度   中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
RESULTID                             FIRST      *     ,       CHARACTER            
WEBSITE                               NEXT      *     ,       CHARACTER            
IPPORT                                NEXT      *     ,       CHARACTER            
STATUS                                NEXT      *   WHT       CHARACTER            

表RESULTXT: 
3 行载入成功
由于数据错误, 0 行没有载入。
由于所有 WHEN 子句失败, 0 行没有载入。
由于所有字段都为空的, 0 行没有载入。

为结合数组分配的空间:     65016字节(63行)
除绑定数组外的内存空间分配:          0字节
跳过的逻辑记录总数:         0
读取的逻辑记录总数:         3
拒绝的逻辑记录总数:         0
废弃的逻辑记录总数:         0
从星期二 1月   08 10:31:57 2002开始运行
在星期二 1月   08 10:32:00 2002处运行结束
经过时间为: 00: 00: 02.70
CPU 时间为: 00: 00: 00.10(可
  六、并发操作
  sqlldr userid=/ control=result1.ctl direct=true parallel=true
        sqlldr userid=/ control=result2.ctl direct=true parallel=true
        sqlldr userid=/ control=result3.ctl direct=true parallel=true
        当加载大量数据时(大约超过10GB),最好抑制日志的产生:
  SQL>ALTER TABLE RESULTXT nologging;
     这样不产生REDOLOG,可以提高效率。然后在CONTROL文件中load data上面加一行:unrecoverable 
     此选项必须要与DIRECT共同应用。
 在并发操作时,ORACLE声称可以达到每小时处理100GB数据的能力!其实,估计能到1-10G就算不错了,开始可用结构相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。

sqlldr用法的更多相关文章

  1. sqlldr 用法

    转自:http://blog.chinaunix.net/uid-23622436-id-2394093.html 在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几 ...

  2. Oracle sqlldr 在DOS窗口导入多列数据到数据库表

    sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...

  3. Oracle数据库导入csv文件(sqlldr命令行)

    1.说明 Oracle数据库导入csv文件, 当csv文件较小时, 可以使用数据库管理工具, 比如DBevaer导入到数据库, 当csv文件很大时, 可以使用Oracle提供的sqlldr命令行工具, ...

  4. 600万用户数据导入MYSQL、MSSQL、Oracle数据库方法【转】

      1.导入MySql数据库 参考文献:http://zhuaxia.org/blog/post/145 1.1.LOAD DATA INFILE语法 因为获得的数据库文件是一个文本文件www.csd ...

  5. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  6. sqlldr的用法 (这个最完整)

    转自:http://blog.chinaunix.net/uid-23622436-id-2394093.html 一:在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以 ...

  7. sqlldr的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  8. Oracle数据加载之sqlldr工具的介绍

    环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 客户端:WIN10 + Oracle 11.2.0.1 client 目录: sqlldr语法 sqlldr实验准备 sqlldr常 ...

  9. java调用sqlldr导入csv文件数据到临时表

    package cn.com.file;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File; ...

随机推荐

  1. 来自高维的对抗 - 逆向TinyTool自制

    一.序 无论是逆向分析还是漏洞利用,我所理解的攻防博弈无非是二者在既定的某一阶段,以高维的方式进行对抗,并不断地升级维度.比如,逆向工程人员一般会选择在Root的环境下对App进行调试分析,其是以ro ...

  2. H5缓存-Manifest

    在app中更新h5页面一直有缓存问题.默认什么都不做的情况下,app有一定的空间缓存页面.一开始更新之后会马上加载,等到app缓存空间上来之后更新就无法下载了.安卓能够清理缓存空间,ios就只能卸载重 ...

  3. sql server中部分函数功能详解

    1.TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. SQL Server 的语法: SELECT TOP number|percen ...

  4. ThinkPHP框架知识的注意点

    ThinkPHP框架 访问入口文件后在application文件夹中会出现一些文件夹,其中的home文件夹是前端模块,也可以在application文件夹中新建文件夹.home文件夹模块中Conf文件 ...

  5. SIFT中的高斯模糊

    高斯模糊是众多模糊算法中的一种,所谓的模糊,就是平滑图像,消除像素之间的差异,最容易想到的方法就是均值平滑. .均值模糊 均值模糊就是取目标像素周围像素的平均值.譬如 像素矩阵. |1|1|1| |1 ...

  6. noscript 标签,一个被忽视的重要标签

    打开 Drupal 的新后台,发现显示大面积空白 .本以为是 CSS 的问题,后来折腾好久才发现是我之前因为某些站的安全问题把浏览器的 Javascript 给禁用了.Javascript 的日益强大 ...

  7. UVa1587 盒子

    前言 第一次刷题,ac的感觉真的很棒! 题目 题目 大意是说,输入6个面,判断是否是个长方体. 思路 根据长方体的特质来判断,比如说6个面中3个面是相互对应的,只有3条不同的边等等. 我就知道我肯定会 ...

  8. Binary Search Tree Iterator leetcode

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  9. 使用Eclipse/MyEclipse开发Java程序

    集成开发环境(IDE)是一类软件 将程序开发环境和程序调试环境集合在一起,提高开发效率 下载eclipse安装包网址:http://www.eclipse.org/downloads/ **MyEcl ...

  10. nodejs的简单爬虫

    闲聊       好久没写博客了,前几天小颖在朋友的博客里看到了用nodejs的简单爬虫.所以小颖就自己试着做了个爬博客园数据的demo.嘻嘻......      小颖最近养了条泰日天,自从养了我家 ...