zoukankan      html  css  js  c++  java
  • ORACLE->SQL*Loader[20180712]

     
        SQL*Loader将外部文件的数据加载到Oracle数据库的表中。它具有强大的数据解析引擎,对数据文件中的数据格式没有太多的限制。
        SQL*Loader可执行以下操作:
            -如果数据文件与数据库不在同一系统上,则通过网络加载数据。
            -在同一会话中可以加载来自多个数据文件的数据。
            -在同一加载会话期间可将数据文件的时间加载到多个表中。
            -可指定数据的字符集
            -选择性加载数据
            -使用SQL函数在加载数据之前操作数据
            -在指定的列中生成唯一的序列值
            -使用操作系统的文件系统访问数据文件
            -从磁盘,磁带或命名管道加载数据
            -生成错误报告帮助解决问题
            -加载任意复杂的对象关系数据
            -使用辅助数据文件来加载LOB和集合
            -使用传统或直接路径加载。虽然传统的路径加载非常灵活,但直接路径加载提供了出色的性能
     
    SQL*Loader 参数
            sqlldr命令,可以调用SQL*Loader
            参数可以和参数文件中组合在一起。然后使用parfile参数指定参数文件的名称
            某些参数也可以通过使用options子句在SQL*Loader控制文件中指定
            在命令行中指定的参数将覆盖参数文件或options子句中指定的任何参数值
     
        输入数据文件
            SQL*Loader从控制文件中指定的一个或多个文件(或操作系统的等效文件)中读取数据。从SQL*Loader的角度看,数据文件中的数据是按记录组织的。一个特定的数据文件可采用固定记录格式、可变记录格式或流记录格式。可通过控制文件中INFILE参数指定记录格式。如果未指定记录格式,默认格式为流记录格式。
       
        SQL*Loader控制文件
                控制文件是一个文本文件,它是使用SQL*Loader可识别的语言编写的。控制文件指示SQL*Loader在何处查找数据、如果分析和解释数据以及何处插入数据等等。
                控制文件包含三个段
                   第一个段包含以下所示的会话范围信息
                    -全局选项,如输入数据文件名和要跳过的记录
                    -用于指定输入数据位置的INFILE子句
                    -要加载的数据
                   第二个段包括一个或多个INTO TABLE块。其中每个一块都包含要字在其中加载数据的表的信息(如表名和表列)
                   第三个段是可选段,如果存在,则其中包含输入数据       
       
        SQL*Loader日志文件
                SQL*Loader开始执行时,会创建日志文件。如果不能创建日志文件,执行就会终止。日志文件包含加载操作的详细说明,包含加载过程中发生的任何错误的说明。
        SQL*Loader 坏文件
                坏文件中包含被SQL*Loader或Oracle DB拒绝的记录。当输入格式无效时,SQL*Loader就会拒绝数据文件记录。SQL*Loader接受处理某一数据文件记录后,会将该数据文件发送到Oracle DB。以便能够作为一行插入到表中。如果Oracle DB确定该行有效,就会将该行插入到表中;如果确定该行无效,则会拒绝该记录,然后SQL*Loader会将该记录放入坏文件中。
        SQL*Loader放弃文件
                仅当需要这种文件并且指定了启用放弃文件时,才会创建此文件。放弃文件中包含的记录是因不符合控制文件指定的任何记录选择标准而从加载文件中过滤掉的记录。
     
    SQL*Loader控制文件通知SQL*Loader以下信息
            要加载数据的位置
            数据格式
            配置详细资料
                -内存管理
                -记录拒绝
                -中断的加载处理详细资料
        数据操作详细资料
        SQL*Loader控制文件是一个文本文件,其中包含数据定义语言(DDL)指令.DDL用来控制SQL*Loader会话的以下方面:
            -SQL*Loader在何处查找要加载的数据
            -SQL*Loader希望如何确定数据的格式
            -SQL*Loader在加载数据时采用了那些配置(包括内存管理,选择与拒绝标准,中断的加载处理等等)
            -SQL*Loader如何处理正在加载的数据
           
     
           
     
    SQL*Loader加载方法
       
            直接路径加载与常规路径加载的比较
                常规路径加载通过执行SQL INSERT语句,将表填充到ORACLE DB中.直接路径加载通过格式化oracle数据块并将其直接写入数据库文件,消除了大部分Oracle DB开销。直接加载不与其他用户争用数据库资源,因此其数据加载速度通常与磁盘速度相差无几。常规路径加载使用SQL处理和数据库COMMIT操作来保存数据。插入记录数组后要执行COMMIT操作。每次数据加载可能涉及多个事务处理。
                直接路径加载使用数据保存将数据块写入Oracle数据文件。这就是为什么直接路径加载比常规路径加载快很多的原因。通过以下特性可区分数据保存与COMMIT的差异:
                    -在数据保存期间,只有完整的数据块才写入数据库中
                    -这些块是在按照表的高水位标记(HWM)写入的
                    -完成数据保存后,HWM会移动
                    -完成数据保存后不会释放内部资源
                    -完成数据保存后不会结束事务处理
                    -每次执行数据保存时不会更新索引
     
     
    SQL*Loader测试
               加载数据和数据文件
    Fixed Record Format 
    固定长度 INFILE datafile_name "fix n"
    固定11个字节
    [oracle@pcqtestxi01 ~]$ cat example.ctl example.dat
    ----example.ctl ----
    load data
    infile 'example.dat' "fix 11"
    into table example
    fields terminated by ',' optionally enclosed by '"'
    (col01,col02)
    ----example.dat ----
    001,   cd, 0002,fghi,
    00003,lmn,
    1, "pqrs",
    0005,uxwx,
    [oracle@pcqtestxi01 ~]$ sqlldr monitor/password control=example.ctl
    SQL*Loader: Release 11.2.0.4.0 - Production on Tue Jun 12 11:45:16 2018
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    Commit point reached - logical record count 5
    查询加载成功的数据
    SQL>  select * from dbmonitor.example;
    COL01 COL02
    ----- --------------------------------------------------
    001   cd
    0002  fghi
    00003 lmn
    1     pqrs
    0005  uxwx
              
    Variable Record Format
     变量记录格式 INFILE datafile_name  "var n"
    [oracle@pcqtestxi01 ~]$ cat example01.ctl example01.dat
     ----example01.ctl------
    load data
    infile 'example01.dat' "var 3"
    into table example
    fields terminated by ',' optionally enclosed by '"'
    (col01 char(5),
    col02 char(7))
    ----example01.dat------
    009hello,cd,010world,im,
    012my,name is,
    [oracle@pcqtestxi01 ~]$ sqlldr monitor/password control=example01.ctl
    SQL*Loader: Release 11.2.0.4.0 - Production on Tue Jun 12 11:41:03 2018
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    Commit point reached - logical record count 3
    [oracle@pcqtestxi01 ~]$ dba
    SQL*Plus: Release 11.2.0.4.0 Production on Tue Jun 12 11:41:06 2018
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL>  select * from dbmonitor.example;
    COL01 COL02
    ----- --------------------------------------------------
    hello cd
    world im
    my    name is
           
    Stream Record Format
    流记录格式 INFILE datafile_name ["str terminator_string"]
    terminator_string被指定为'char_string'或X'hex_string',其中:
        'char_string'是用单引号或双引号括起来的字符串
         X'hex_string'是一个十六进制格式的字节串
      当terminator_string包含特殊(不可打印)字符时,应该将其指定X'hex_string。但是通过使用反斜杠,可以将一些不可打印的字符指定为(‘char_string’)
     n表示换行
     t表示一个水平标签
     f表示换页
     v表示一个垂直选项卡
     r表示回车
    SQL*Loader 命令行参数
     
         CONTROL   指定控制文件名称
         OPTIONS     条件选项 OPTIONS (BINDSIZE=100000, SILENT=(ERRORS, FEEDBACK) )
         PARAMETER    参数文件
         命令行参数
               BAD   指定坏文件名称
               BINDSIZE     指定BIND数组最大的字节,它的默认值 依赖操作系统和ROWS数
               COLUMNARRAYROWS   指定为直接路径分配的行数,必须指定它或接受默认值
               DATA 数据文件,在控制文件INFILE中指定,如果命令行中指定了数据文件,则会忽略控制文件中的第一个数据文件
               DATE_CACHE  日期缓存,用于存储从文本字符串到内部日期格式的转换结果。如果数据文件中重复出现相同的日志,则使用日期缓存可以提高直接路径加载的速度。默认值1000,只适用于直接路径加载
               DIRECT  直接路径加载,默认值false 不启用,true 启用
               DISCARD     丢弃文件,指用于存储既不插入表也不被拒接的记录
               DISCARDMAX   指定在数据加载终止之前允许的丢弃记录数。默认值ALL
               ERRORS     指定允许的最大插入错误数量。如果错误数量超过了ERRORS指定的值,那么SQL*Loader终止加载
               EXTERNAL_TABLE     指示SQL*Loader是否使用外部表选项加载数据
                    NOT_USED       默认值。使用常规或直接路径模式执行
                    GENERATE_ONLY           在SQL*Loader日志文件中放置使用外部表进行加载所需的所有SQL语句,不会真实执行。
                    EXECUTE          尝试执行使用外部表执行装入所需的SQL语句
               FILE   要加载到的表空间文件。它仅用于直接路径并行加载
               LOAD      指定要加载的逻辑记录的最大数量(跳过指定数量之后的记录)
               LOG        指定SQL*Loader将创建的日志文件,存储加载过程的日志记录
               MULTITHREADING      多线程功能,多CPU系统上为true,单CPU系统上为false。该参数仅适用于直接路径加载
               PARALLEL        并行度
               PARFILE      指定包含常用命令行参数的文件名称
               READSIZE   读取缓冲区大小,较大的读取缓冲区的优点是在需要提交操作之前可以读取更多的数据
               RESUMABLE    用于启用和禁用可恢复的空间分配,默认值false
               RESUMABLE_NAME        此参数的值标识可恢复的语句。此值会插入到USER_RESUMABLE或DBA_RESUMABLE视图中,用于帮助识别已暂停的特定可恢复语句。除非RESUMNABLE为true,否则将忽略此参数
               RESUMABLE_TIMEOUT        指定必须修正错误的时间段。如果错误在超时期限内没有解决,语句执行就会终止,而不会结束。除非RESUMNABLE为true,否则将忽略此参数。默认值 7200秒,2小时
               ROWS    每次提交的行数。
                         仅限传统路径加载:ROWS指定数组中的行数
                         仅限直接路径加载:ROWS标识在数据保存之前要从数据文件读取的行数。
               SILENT    反馈消息,   SILENT=(HEADER, FEEDBACK)
                         HEADER      抑制SQL*Loader标头消息
                         FEEDBACK       禁止已提交的反馈信息
                         ERRORS     禁止数据错误信息
                         DISCARDS        禁止丢失信息
                         PARTITIONS     直接加载分区表期间禁用将每分区统计信息写入日志文件
                         ALL     抑制所有值,HEADER、FEEDBACK、ERRORS、DISCARDS和PRATITIONS
     
               SKIP  记录跳过,该参数继续由于某种原因而中断的加载
               SKIP_INDEX_MAINTENANCE     默认值false,停止直接路径加载对索引维护,但不适用用于常规路径加载。
                         适用于本地和全局索引
                         可以使用PARALLEL参数,对具有索引对象执行并行加载
                         可以使用INTO TABLE子句中的PARTITION参数,对具有全局索引的表执行单个分区加载
                         将加载设置为索引不可用状态的索引和索引分区的列表
               SKIP_UNUSABLE_INDEXES      默认值true,如果遇到索引不可用状态下的索引,则会跳过该索引并继续加载操作
               STREAMSIZE         指定直接路径流的大小(以字节为单位)
               USERID        用于提供Oracle用户名和密码,如果省略则会提示输入,如果以SYS身份连接,则必须指定AS SYSDBA    
     
               退出时检查和显示代码,不同平台提示的数值代码
     
    Result
    Exit Code
    All rows loaded successfully
    EX_SUCC
    All or some rows rejected
    EX_WARN
    All or some rows discarded
    EX_WARN
    Discontinued load
    EX_WARN
    Command-line or syntax errors
    EX_FAIL
    Oracle errors nonrecoverable for SQL*Loader
    EX_FAIL
    Operating system errors (such as file open/close and malloc)
    EX_FAIL
     
    For UNIX, the exit codes are as follows:
     
    EX_SUCC 0
    EX_FAIL 1
    EX_WARN 2
    EX_FTL  3
    For Windows NT, the exit codes are as follows:
     
    EX_SUCC 0
    EX_FAIL 1
    EX_WARN 2
    EX_FTL  4
     
    内容领域
         控制数据的领域,position(1:2)截取字符1到2位置,作为一个字段
    .
    .
    .
    1  (hiredate  SYSDATE,
    2     deptno  POSITION(1:2)  INTEGER EXTERNAL(2)              NULLIF deptno=BLANKS,
    3     job   POSITION(7:14)  CHAR  TERMINATED BY WHITESPACE               NULLIF job=BLANKS  "UPPER(:job)",
           mgr    POSITION(28:31) INTEGER EXTERNAL               TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
           ename  POSITION(34:41) CHAR               TERMINATED BY WHITESPACE  "UPPER(:ename)",
           empno  POSITION(45) INTEGER EXTERNAL                TERMINATED BY WHITESPACE,
           sal    POSITION(51) CHAR  TERMINATED BY WHITESPACE               "TO_NUMBER(:sal,'$99,999.99')",
    4     comm   INTEGER EXTERNAL  ENCLOSED BY '(' AND '%'              ":comm * 100"  )
     
    SQL*Loader Field List Reference
    (用于指定数据截取、类型和限制)
         1.Field List Contents
    (数据内容格式)
               (字段名 截取范围 类型|类型)
               POSITION(start:end) 指定截取字符范围
                    INTEGER EXTERNAL(类型,整型)
                         NULLIF(空时赋初始值)
               TERMINATED BY WHITESPACE(分隔符)
               ENCLOSED BY(结束符)
         2.Specifying the position of a data filed
    (指定数据所在范围)
               语法:(start|*/+integer :或- end)
                    start 开始位置
                    end 结束位置
                    * 从前面位置以后的
                    +integer 指定取多少值
         3.Specifying columns and fields
    (指定字段和列)
               Specifying filler  fields(填充字段)
                    BOUNDFILLER或FILLER指定填充字段
                    规则
                         填充字段的语法与基于列的字段语法相同,只是填充段的名称后跟上填充字符
                         填充字段具有名称,但它们未加载到表中
                         填充字段可用作init_spec的参数(如NULL和DEFAULTIF)
                         填充字段可用作指令的参数(如SID、OID、REF和BFILE)
                    注意事项
                         填充字段可用于NULLIF、DEFAULT和WHEN子句中的字段条件规范。但是它们不能在SQL字符串中使用
                         填充字符规范不能包含NULLIF或DEFAULT子句
                         如果指定并适用TRAILING NULLCOLS,则填充字段将初始化为NULL.如果另一个字段引用了无效的填充字段,则会生成错误
                         填充字段可以出现在数据文件中的任何位置,包含对象的字段列表内或VARRAY的定义内
                         SQL字符串不能指定为填充字段规范的一部分,因为没有绑定数组中的填充程序分配空间
         4.SQL*Loader datatypes
    (数据类型)
               Nonportable Datatypes
    (不可移植数据类型)
                    数值类型
                         INTEGER(n:1,2,4,8) 全二进制整数
                         SMALLINT 半二进制整数
                         FLOAT 单精度浮点二进制数
                         DOUBLE 双精度浮点二进制数
                         BYTEINT 二进制表的十进制值,BYTEINT长度始终为1
                         ZONED 分区十进制数
                         DECIMAL 压缩十进制数
                    长数值类型
                         VARGRAPHIC 变长的双字节字符集
                         VARCHAR 字符串
                         VARRAW 一个2字节的二进制和一个RAW字符串组成
                         LONG VARRAW 具有4个字节长度的子字段(VARRAW)
               Portable Datatypes
    (可移植数据类型)
                    数值类型
                         CHAR (CHAR length delim_spec)
                         Datetime and Interval
                               DATE
                               TIME
                               TIME WITH TIME ZONE
                               TIMESTAMP
                               TIMESTAMP WITH TIME ZONE
                               TIMESTAMP WITH LOCAL TIME ZONE
                               INTERVAL YEAR TO MONTH
                               INTERVAL DAY TO SECOND
                         GRAPHIC 双字节字符集 graphic graphic_char_length
                         GRAPHIC EXTERNAL 双字节字符集
                         Numeric EXTERNAL(INTEGER,FLOAT,DECIMAL,ZONED)
                         RAW 原二进制数据
                    长数据类型
                         VARCHARC 字符长度子字段和字符串值子字段组成
                         VARRAWC 由RAW字符串子字段组成
     
    Table 9-2 Datatype Conversions for Datetime and Interval Datatypes
     
    SQL*Loader Datatype
    Oracle Database Datatype (Conversion Support)
    N
    N (Yes), C (Yes), D (No), T (No), TS (No), YM (No), DS (No)
    C
    N (Yes), C (Yes), D (Yes), T (Yes), TS (Yes), YM (Yes), DS (Yes)
    D
    N (No), C (Yes), D (Yes), T (No), TS (Yes), YM (No), DS (No)
    T
    N (No), C (Yes), D (No), T (Yes), TS (Yes), YM (No), DS (No)
    TS
    N (No), C (Yes), D (Yes), T (Yes), TS (Yes), YM (No), DS (No)
    YM
    N (No), C (Yes), D (No), T (No), TS (No), YM (Yes), DS (No)
    DS
    N (No), C (Yes), D (No), T (No), TS (No), YM (No), DS (Yes)
     
     
     
  • 相关阅读:
    e552. 取Applet的参数
    e551. 精简的Applet
    e558. 在Applet中多图片交互显示
    e1087. try/catch语句
    e1086. if/else语句
    e1087. 用For循环做数组的遍历
    e1084. 捕获错误和异常
    Zookeeper 应用程序
    Zookeeper API
    Java并发编程:volatile关键字解析
  • 原文地址:https://www.cnblogs.com/also-brook/p/9303257.html
Copyright © 2011-2022 走看看