Oracle SQL Loader的详细语法

SQLLDR keyword=value [,keyword=value,...]
有效的关键字:
userid -- ORACLE 用户名/口令 control -- 控制文件名 log -- 日志文件名 bad -- 错误文件名 data -- 数据文件名 discard -- 废弃文件名 discardmax -- 允许废弃的文件的数目 (全部默认) skip -- 要跳过的逻辑记录的数目 (默认 0) load -- 要加载的逻辑记录的数目 (全部默认) errors -- 允许的错误的数目 (默认 50) rows -- 常规路径绑定数组中或直接路径保存数据间的行数 (默认: 常规路径 64, 所有直接路径) bindsize -- 常规路径绑定数组的大小 (以字节计) (默认 256000) silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) direct -- 使用直接路径 (默认 FALSE)
如果表中有索引的话,是不能指定direct=TRUE的,除非使用skip_index_maintenance=TRUE,这个就是在导入的时候忽略索引,所以在数据导入完毕以后,查看索引的状态应该都是无效的,需要重建之,如下SQL:select  * from dba_indexes where table_name='?' ;
alter  idnex index_name rebuild ;
重新建立索引要比新建索引快。
  parfile -- 参数文件: 包含参数说明的文件的名称
 parallel -- 执行并行加载                    (默认 FALSE)

 file -- 要从以下对象中分配区的文件 skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区 (默认 FALSE) skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用 (默认 FALSE) commit_discontinued -- 提交加载中断时已加载的行 (默认 FALSE) readsize -- 读取缓冲区的大小 (默认 1048576) external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED) columnarrayrows -- 直接路径列数组的行数 (默认 5000) streamsize -- 直接路径流缓冲区的大小 (以字节计) (默认 256000) multithreading -- 在直接路径中使用多线程 resumable -- 启用或禁用当前的可恢复会话 (默认 FALSE) resumable_name -- 有助于标识可恢复语句的文本字符串 resumable_timeout -- RESUMABLE 的等待时间 (以秒计) (默认 7200) date_cache -- 日期转换高速缓存的大小 (以条目计) (默认 1000)

控制文件的写法

示例一:

一个控制命令的脚本文件,通常以ctl结尾,内容如下:

LOAD    DATA
INFILE          't.dat'
                     导入的文件
// INFILE      'tt.date'                
                导入多个文件
// INFILE *         
表示要导入的内容就在control文件里下面的BEGINDATA后面就是导入的内容
INTO  TABLE    table_name   
指定装入的表

BADFILE            'c:/bad.txt'    选,指定坏文件地址,缺省在当前目录下生成与原文件名一致的.bad文件

APPEND             原先的表有数据 就加在后面                                                ※注一
FIELDS   TERMINATED    BY    ','    OPTIONALLY    ENCLOSED  BY '"'
           ※注二
TRAILING     NULLCOLS           
表的字段没有对应的值时允许为空
*************
下面是表的字段
(

col_1 ,

col_2 ,

col_filler   FILLER                 // FILLER 关键字    此列的数值不会被装载
//
:  lg, lg, not 结果 lg lg

BEGINDATA               对应开始的 INFILE * 导入的内容就在control文件里
10,Sql,what
20,lg,show

注一:

************* 以下是4种装入表的方式
APPEND      
          原先的表有数据 就加在后面
INSERT     
             载空表 如果原先的表有数据 sqlloader会停止 认值
REPLACE      
         原先的表有数据 原先的数据会全部删除
TRUNCATE  
         指定的内容和replace的相同 会用truncate语句删除现存数据

注二:

// TERMINATED    BY     WRITESPACE                             表示以空白分割
如果没声明FIELDS    TERMINATED   BY     ',' 时,可以用下面两种方式实现同样功能:
1
为每一列指定分隔符
 (

 col_1 [interger external] TERMINATED BY ',' ,
 col_2 [date "dd-mon-yyy"] TERMINATED BY ','
,              //插入DATE数据
 col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'

 )
2
用位置告诉字段装载数据
 (

col_1 position(1:2),
col_2 position(3:10),
col_3 position(*:16),
                 // 这个字段的开始位置在前一字段的结束位置
col_4 position(1:16),
col_5 position(3:10) char(8)
     // 指定字段的类型

 )


1. NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload(在/oracle/product/10.2.0/bin目录下可以看到存在sqlldr

2. 当加载大量数据时,可以抑制日志的产生:

a)      ALTER   TABLE   RESULTXT  nologging;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值