Oracle sqlldr命令

今天别人的入库代码,看的真有点晕,最后看完才知道是用了sqlldr命令。哎。。。还是学艺不精啊,今后还是要多努力。

总结哈sqlldr命令:虽然大多是网上来的,自己要有体会嘛 !开源就是好啊。

sqlldr是cmd下的命令,用来将文本格式数据导入到数据库中。
命令格式:
sqlldr username/[email protected] control=*.ctl

*.ctl格式为:
load data
infile
"d://test.txt"   
外部数据文件
infile "d://test1.txt"  
可指定多个数据文件
append into table test  
向表中追加数据
fields terminated by
","   
外部文件的数据以“,”分隔
OPTIONALLY ENCLOSED BY
‘"‘  部分字段可以用双引号包起来
trailing
nullcols       
表中的字段没有对应的值时填充空值
(
id integer
external,   
integer external 表示插入的数据是string,如果只保留integer,表示插入的数据是二进制
name
"upper(:name)",    
将插入的值转换为大写
con
":id||:name",       
表中CON列的值是ID和NAME的组合值
dt
date"yyyy-mm-dd"     
插入日期型数据
)
说明:
load data
告诉SQLLDR要做什么(在这个例子中,则指示要加载数据)。SQLLDR还可以执行CONTINUE_LOAD,也就是继续加载。只有在继续一个多表直接路径加载时才能使用后面这个选项

INFILE *
:如果是*号,这会告诉SQLLDR所要加载的数据实际上包含在控制文件本身上,例见下一文。如上例指定包含数据的另一个文件的文件名。如果愿意,可以使用一个命令行参数覆盖这个INFILE语句。要当心,命令行选项总会涵盖控制文件设置

在append的位置还可以用以下列表中的一个值:

insert  
向表中插入值,但要求表开始时为空,默认的加载选项
replace
delete表中的数据,然后插入新值,记录多时速度慢
append  
向表中追加数据
truncate
trunctate表,然后插入新值,不能回退
FIELDS TERMINATED BY
‘,’:告诉SQLLDR数据的形式应该是用逗号分隔的值。为SQLLDR描述输入数据的方式有数十种;这只是其中较为常用的方法之一。

TERMINATED BY
WHITESPACE会解析这个串,查找空白符(制表符、空格和换行符)的第一次出现,然后继续查找,直至找到下一个非空白符。
(id integer external,
.....
dt
date"yyyy-mm-dd"):告诉SQLLDR所要加载的列、这些列在输入数据中的顺序以及数据类型。这是指输入流中数据的数据类型,而不是数据库中的数据类型。列的数据类型默认为CHAR(255)

加载这样的定界数据时,很可能想逃过输入记录中的某些列。例如,你可能加载字段1、3和5,而跳过第2列和第4列。为此,SQLLDR提供了FILLER关键字。这允许你映射一个输入记录中的一列,但不把它放在数据库中。

例:
C:\>sqlldr scott/tiger control=d:/dept.ctl
log=d:/sqlldr.log

dept.ctl的内容如下:

load date
infile
"d://test.txt"

append into table tt
fields terminated by ","  
trailing
nullcols

(
id integer external,  
name
"upper(:name)",

con
":id||:name",

dt
date"yyyy-mm-dd"

)

test.txt的数据如下
1,a,,2007-07-8
2,b,,2008-07-8
3,c,,2009-07-8

附录:有效的关键字:方便今后使用和查询。

    userid -- ORACLE 用户名/口令       

   control -- 控制文件名               

       log -- 日志文件名                   

       bad -- 错误文件名                  

      data -- 数据文件名                 

   discard -- 废弃文件名

discardmax -- 允许废弃的文件的数目         (全部默认)

      skip -- 要跳过的逻辑记录的数目  (默认 0)

      load -- 要加载的逻辑记录的数目  (全部默认)

    errors -- 允许的错误的数目         (默认 50)

      rows -- 常规路径绑定数组中或直接路径保存数据间的行数

               (默认: 常规路径 64, 所有直接路径)

  bindsize -- 常规路径绑定数组的大小 (以字节计)  (默认 256000)

    silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)

    direct -- 使用直接路径                     (默认 FALSE)

   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)

no_index_errors -- 出现任何索引错误时中止加载  (默认 FALSE)

PLEASE NOTE: 命令行参数可以由位置或关键字指定

。前者的例子是 ‘sqlldr

scott/tiger foo‘; 后一种情况的一个示例是 ‘sqlldr control=foo

userid=scott/tiger‘。位置指定参数的时间必须早于

但不可迟于由关键字指定的参数。例如,

允许 ‘sqlldr scott/tiger control=foo logfile=log‘, 但是

不允许 ‘sqlldr scott/tiger control=foo log‘, 即使

参数 ‘log‘ 的位置正确。

时间: 2024-10-12 17:26:31

Oracle sqlldr命令的相关文章

使用sqlldr命令导入资料到Oracle数据库表中的示例说明

CSV: Comma-Separated Values(逗号分隔值)的缩写,是以逗号分隔字段的多行文本文件 sqlldr 是sql*loader的缩写,此工具在安装完整版的Oracle客户端后就有 使用sqllldr可以将有规律的文本数据(如csv)导入数据表 导入示例:将csv文本文件andon.txt导入到manpowertest中的testandon表中 testandon表结构 create table TESTANDON ( build_no VARCHAR2(5), device_n

Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”

昨天看到一个同事在通过PL/SQL Developer工具把文本数据往oracle表;有两个文本:一个有30万条记录:一个7万多条记录.在导入到过程中:出现错误记录还需要点击确认.不过使用黑科技(屏幕精灵)自动点击.单一个7万多记录的文本需要10分钟左右的时间. 看到这种情况:我热心肠爆发:我帮你来提快导入速度.我想到两种方案:    1:oracle的sqlldr命令    2:oracle的外部表:    由于文本存在错误记录:就选择1.    文本格式如下:存在有76760条记录 [[em

Oracle sqlldr 应用

我们可以用Oracle的sqlldr工具来导入数据,着重关注以下几个参数: userid -- Oracle 的 username/password[@servicename]control -- 控制文件,可能包含表的数据log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).logbad -- 坏数据文件,默认为 控制文件(去除扩展名).baddata -- 数据文件,一般在控制文件中指定.用参数控制文件中不指定数据文件更适于自动操作errors -- 允许的错误记录数,可以用他

Oracle sqlldr导入导出txt数据文件详解

一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSET 'UTF8' --字符集设定 INFILE 'd:\input_test.txt' --要导入的文本数据路径,可写多个REPLACE into TABLE input_test --清空原有数据再导入方式 追加导入 用append into table t_namefields terminat

ORACLE常用命令

1 如何查看数据库中都有什么表? select * from sys.user_tables; 2 如何链接数据库 sqlplus /nolog;conn sys/oracle as sysdba; 3 如何启动数据库 startup; 4 查看ORACLE实例结构 desc V$instance; 5 查看用户默认表空间.临时表空间信息 select distinct username,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users

oracle sqlplus命令详解

涉及到的知识要点a.带有一个&的替换变量的用法b.带有两个&的替换变量用法c.define命令用法d.accept命令用法e.定制SQL*Plus环境f.在glogin.sql文件中保存定制结果g.sqlplus编辑命令 a.带有一个&的替换变量的用法1).使用带有一个&号的变量值来提示用户输入一个值.eg.SQL> SELECT     empno, ename, sal, deptno FROM  emp WHERE empno = &empno;输入 e

Oracle 常用命令小结

1.当前数据库中查看建表语句 select dbms_metadata.get_ddl('TABLE','表名') from dual; 2. Oracle 常用命令小结,布布扣,bubuko.com

Data Base Oracle 常用命令

Data Base  Oracle 常用命令 1.登录:(不需要密码,属于管理员权限) conn /as sysdba 2.查看数据库存储位置: select name from v$datafile; 3.创建表空间: 语法:create tablespace 表空间名称 datafile '数据文件的路径' size 大小; 示例:create tablespace test_db datafile 'D:\ORACLE\ORADATA\ORCL\test_db.dbf' size 3000

oracle常用命令【转载】

oracle常用命令 一.Oracle数据库实例.用户.目录及session会话查看: 1.ORACLE SID查看设置 查看SID.用户名 $ env|grep SID .select * from v$instance.select instance_name,host_name from v$instance; 查看数据库所有用户及用户状态:SQL> select usernames,account_status from dba_users; 设置SID $ export ORACLE_