当前位置:数据库 > Oracle >>

Oracle SQL*Loader体系结构

Oracle SQL*Loader体系结构
 
一、SQL*Loader的体系结构
    SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括
        Input Datafiles     -->装载到数据库的原始数据文件
        Loader Control file  -->提供给QL*Loader寻找及翻译数据的相关信息
        Log File             -->装载过程中产生的日志信息
        Bad Files          -->被剔除的一些不合乎规范化的数据,由SQL*Loader剔除,也可能被Oracle剔除
        Discard Files       -->对不满足控制文件中记录选择标准的一些物理记录
        以上五个完整的部分最终将数据导入到数据库,当然,部分组件可以省略。
 
二、控制文件的作用及组成
    控制文件是一个文本文件,控制文件中记录的信息告诉SQL*Loader在哪里寻找数据、如何翻译数据,以及将数据插入到哪里等
    控制文件的组成分为三个部分
        第一部分主要是关于通外部会话的相关信息
            如一些全局选项、行信息、是否跳过特殊记录等
            infile子句指明了从哪里寻找源数据
        第二部分由一个或多个Intotable块,每一个块包含一些被导入表的相关信息,如表名,列名等
        第三部分为可选项,如果存在则包含导入的源数据
    控制文件写法的注意事项
        语法结构自由
        不区分大小写
        在行开始处使用--来作为注释行,在控制文件中的第三部分使用--来注释不被支持
        关键字constant 和zone被保留
 
三、数据文件
    数据文件可以有多个,这些数据文件需要在控制文件中指定
    从SQL*Loader角度来看,数据文件中的数据被当做一条条记录
    一个数据文件描述数据文件记录有三种可选的格式
        固定记录格式
        可变记录格式
        流记录格式
    这些记录格式在控制文件使用infile参数时,如果记录的格式未指定,则缺省的为流记录格式。如使用infile*时则为流记录格式
   
    下面给出几种不同记录格式的例子
        a.固定格式:INFILE datafile_name "fix n"
 
            load data
            infile 'example.dat'  "fix 11"   --表明每条记录长度固定为个字节
            into table example
            fields terminatedby ',' optionally enclosedby '"'
            (col1, col2)
 
            example.dat:
            001,   cd, 0002,fghi, --第一条记录为,   cd, 第二条记录为,fghi, 其中第二条记录包含了一个换行符
            00003,lmn,
            1, "pqrs",
            0005,uvwx,
           
        b.可变格式:INFILE "datafile_name" "var n"
            load data
            infile 'example.dat'  "var 3"    --使用3位来描述一条记录的长度
            into table example
            fields terminatedby ',' optionally enclosedby '"'
            (col1 char(5),
             col2 char(7))
 
            example.dat:
            009hello,cd,010world,im, --009 表明第一条记录的长度为个9字节,表明第二条记录的长度为10个字节等
            012my,nameis,
 
       
        c.流记录格式:INFILE datafile_name ["str terminator_string"] 
            load data
            infile 'example.dat'  "str '|/n'"   --使用|或换行符来作为一条记录的终止
            into table example
            fields terminatedby ',' optionally enclosedby '"'
            (col1 char(5),
             col2 char(7))
 
            example.dat:
            hello,world,|
            james,bond,|
   
    逻辑记录的概念
        通常情况下,数据文件中的一条物理记录即是一条逻辑记录,即数据文件的一条记录对应于数据库的一条记录SQL*Loader扩展了该功能可以将多条物理记录形成一条逻辑记录,而由这个组合再来生成一条数据库中的记录
        SQL*Loader支持两种策略来形成逻辑记录
            组合固定条数的物理记录来形成逻辑记录
            将满足特定条件的物理记录组合并形成逻辑记录
 
四、数据文件装载方式   
    1.传统路径导入
        使用生成SQL Insert语句来处理源数据,并且通过commit提交保存数据。每次数据导入将产生一些事务
        在插入数据时寻找可用数据块,然后将数据填充到数据块
        在插入到分区表的单个分区时使用下面的语法
            INSERT INTO TABLE TPARTITION (P)VALUES ...
        基于多cpu系统使用多个装载会话执行并发。即将数据文件分割为多个来装载
       
    2.直接路径导入
        直接将数据写到Oracle数据文件,并更所使用块的高水位线标记来保存数据
        支持数据的并行导入
        直接路径导入期间,数据转换发生在客户端而非服务器端。即位于服务器端参数文件中NLS参数不会被使用
            可以通过在控制文件中设置NLS参数或设置服务器端合适的环境变量,如下面的例子
            HIREDATE DATE 'YYYYMMDD'               --为控制文件中的HIREDATE指定格式
            % export NLS_DATE_FORMAT='YYYYMMDD'   --在服务器端设定NLS_DATE_FORMAT
        直接路径装载单个分区或子分区,装载期间的其它分区可以执行DML操作
            LOAD INTO TABLE TPARTITION (P)VALUES ...
            LOAD INTO TABLE T SUBPARTITION(P) VALUES ...
        使用直接路径装载时,需要指定DIRECT=true
        支持两种不
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,