SQL*Loader工作机制以及实例

来源:互联网 发布:怎么在淘宝上买电棍 编辑:程序博客网 时间:2024/06/05 06:20
   SQL Loader是一个将其他数据源转换为Oracle数据库数据的工具(Export/Import转换的只能是Oracle类型的数据源)。
1.工作机制
   SQL Loader从控制文件中读取指令,然后根据指令读取数据文件,然后将数据存入Oracle数据库中。所以,SQL Loader至少涉及到两个核心文件——控制文件和数据文件。
   控制文件通知SQL Loader数据应放在何处,并描述装入Oracle数据库中的各类数据。
   数据文件,是转换过程中的数据源,存放有要进行转换的数据。
   所以整个过程为:sqlldr命令——〉读取控制文件——〉读取数据文件——〉根据规则转载数据
2.实例
   2.1 sqlldr命令
   下面是一个典型的数据转换的命令(在Dos窗口下运行)
   sqlldr  smith/baby         --ID/密码
   control = portnoy         --控制文件的名称
   parrale = true               --并行,同时运行多个会话,并同时将数据装入同样的表,但目标表不能索引
   direct = true                 --先将数据载入内存,然后直接拷贝到数据库中
   skip = 500                   --数据文件的前500条省略
   load = 100                   --装载1000条
   2.2 控制文件
   在命令中参数control所对应的即为控制文件portnoy.ctl,其内容如下:
   load data          --1、控制文件标识
   infile 'dataSource.txt'    --2、要输入的数据文件名为'dataSource.txt'
   append into table targetTable --3、向表targetTable中追加记录,还可以是Insert/Replace/Truncate
   when name <> 'Admin'          --4、使用when关键字废弃name列值为'Admin'的数据行
    (id       position(01:8) INTEGER EXTERNAL,
         name     position(11:24) CHAR,
         sex      position(26,27) INTEGER EXTERNAL,
  birthday postion(28,34)  DATE 'YYYYMMDD')     -----定义列对应顺序
  2.3数据源文件
  在控制文件中说明了转换规则,以及数据源名称,数据源名称如下,dataSource.txt
  00000001  Taub                 1 19980215
  00000002  Sandor Penya    0 19480223
  00000003  Glickman,Gayle 0 12980205
  00000004  Murphy,Ann      0 19790215
3.字段分割的标准
   从上面的dataSource可以看出,字段分割是以字段字符位置来截取的,在这种情况下,需要声明字段类型,如portnoy.ctl所定义的。
   还有一种情况,如果字段的分割是以特定字符,例如逗号,那么只需要直接列出对应字段即可。下面是另一种字段分割方式下的控制文件和数据源文件。
   数据源文件:dataSource2.txt
   0001,1996,320,10,4
   0001,1997,330,12,7
   0002,1997,230,0,3

   控制文件:portnoy2.ctl
   LOAD DATA
   INFILE 'STATS.TXT'
   INTO TABLE PLAYER_STATISTICS
   WHEN YEAR = "1997"
   FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
       (player_id,year,batting_average,home_runs,stolen_bases)
4.同时装载到多个表的控制文件的例子
    LOAD DATA
    INFILE 'MORE_STATS.TXT'
    BADFILE 'LOAD3.BAD'
    DISCARDFILE 'LOAD3.DSC'
    INTO TABLE baseball_player
      (player_id       POSITION(1:4)   INTEGER EXTERNAL,
       last_name       POSITION(11:17) CHAR,
        first_name       POSITION(19:23) CHAR)
   INTO TABLE player_statistics
      (player_id       POSITION(1:4)   INTEGER EXTERNAL,
       year            POSITION(6:9)   INTEGER EXTERNAL,
       batting_average POSITION(25:27) CHAR)
5.其它文件
     涉及到的文件还包括坏数据文件(保存没有成功装入数据的记录)、丢弃文件(使用When关键字而废弃的记录)、日子文件。其中需要注意的是坏数据文件:如果为连续的SQL*Loader会话使用同一个控制文件装载,那么进行下一个装载文件之前,必须对bad文件进行处理,因为后面的处理的bad文件的结果会覆盖前面的结果。