Oracle SQL Loader的详细语法

系统 1791 0
SQL*LOADER ORACLE 的数据加载工具,通常用来将操作系统文件迁移到 ORACLE 数据库中。 SQL*LOADER 是大型数据 仓库选择使用的加载方法,因为它提供了最快速的途径( DIRECT PARALLEL )。现在,我们抛开其理论不谈,用实例来使您快速掌握 SQL*LOADER 的使用方法。   
   
首先,我们认识一下 SQL*LOADER   
NT 下, SQL*LOADER 的命令为 SQLLDR ,在 UNIX 下一般为 sqlldr/sqlload   
如执行: d:\oracle>sqlldr   
  我们可以从中看到一些基本的帮助信息,这里,我用到的是中文的 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  
  result.ctl 内容:   
  load   data  
  infile   ‘result.csv’  
  into   table   resultxt    
  (resultid   char   terminated   by   ‘,’,  
  website   char   terminated   by   ‘,’,  
  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  结尾以空白分隔   
 
三、此时我们执行加载:   
   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=result2.ctl   direct=true   parallel=true   
  
当加载大量数据时(大约超过 10GB ),最好抑制日志的产生:   
  
    SQL>ALTER   TABLE   RESULTXT   nologging;   
  
这样不产生 REDO LOG ,可以提高效率。然后在 CONTROL 文件中 load   data 上面加一行: unrecoverable      此选项必须要与 DIRECT 共同应用。   
  
 在并发操作时, ORACLE 声称可以达到每小时处理 100GB 数据的能力!其实,估计能到 1 10G 就算不错了,开始可用结构   相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。    
  
有关 SQLLDR 的问题     
  
控制文件: input.ctl ,内容如下:     
  load   data    –1 、控制文件标识     
 
infile   ‘test.txt’    –2 、要输入的数据文件名为 test.txt    
 
append   into   table   test –3 、向表 test 中追加记录     
 
fields   terminated   by   X’09′ –4 、字段终止于 X’09′ ,是一个制表符( TAB     
 (id,username,password,sj)    —– 定义列对应顺序     
   
 
其中 append 为数据装载方式,还有其他选项:     
  a insert ,为缺省方式,在数据装载开始时要求表为空     
  b append ,在表中追加新记录     
  c replace ,删除旧记录,替换成新装载的记录     
  d truncate ,同上


参考文章: http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html  看了它,应该问题都能解决了

Oracle SQL Loader的详细语法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论