Oracle Sql Loader的学习使用

最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看。点击 这里 查看详细

1,概述:

Sql Loader: 一个批量工具,将文件数据导入到数据库。可以导入一个表或者多个表,甚至可以在导入时修改数据。

2,使用

a,你电脑需要装Oracle,不然你是找不到Sqlldr 这个命令的。

在控制输入台输入 sqlldr:

会列出相关的参数介绍。


> sqlldr
.
.
.
Usage: SQLLDR keyword=value [,keyword=value,...]

Valid Keywords:

userid -- ORACLE username/password
control -- control file name
log -- log file name
bad -- bad file name
data -- data file name
discard -- discard file name
discardmax -- number of discards to allow (Default all)
skip -- number of logical records to skip (Default 0)
load -- number of logical records to load (Default all)
errors -- number of errors to allow (Default 50)
rows -- number of rows in conventional path bind array or between direct
path data saves
(Default: Conventional path 64, Direct path all)
bindsize -- size of conventional path bind array in bytes (Default 256000)
silent -- suppress messages during run (header,feedback,errors,discards,
partitions)
direct -- use direct path (Default FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- do parallel load (Default FALSE)
file -- file to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions
(Default FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as
unusable (Default FALSE)
commit_discontinued -- commit loaded rows when load is discontinued (Default
FALSE)
readsize -- size of read buffer (Default 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE
(Default NOT_USED)
columnarrayrows -- number of rows for direct path column array (Default 5000)
streamsize -- size of direct path stream buffer in bytes (Default 256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session (Default FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
date_cache -- size (in entries) of date conversion cache (Default 1000)

PLEASE NOTE: Command-line parameters may be specified either by position or by keywords.
An example of the former case is ‘sqlldr scott/tiger foo‘; an example of the latter
is ‘sqlldr control=foo userid=scott/tiger‘.One may specify parameters by position before
but not after parameters specified by keywords.For example, ‘sqlldr scott/tiger control=foo
logfile=log‘ is allowed, but ‘sqlldr scott/tiger control=foo log‘ is not, even though the
position of the parameter ‘log‘ is correct.

b, sqlldr 将文本文件的导入到数据库

这里看个简单例子。看看sqlldr到底怎么工作的。

1,准备数据文件,例如input.txt.这个文件将导入到数据库中。

首先查看我们数据库的表格式。


create table student(
SNAME VARCHAR(20),
SAGE INTEGER,
SEMAIL VARCHAR(20),
SPHONE VARCHAR(20),
SADDRESS VARCHAR(20)
)

input.txt 文件


12,12,abc@gmail.com,12,address
13,13,abc@gmail.com,13,address
14,14,abc@gmail.com,14,address
15,15,abc@gmail.com,15,address
16,16,abc@gmail.com,16,address
17,17,abc@gmail.com,17,address
18,18,abc@gmail.com,18,address
19,19,abc@gmail.com,19,address

2,控制文件input.ctl

load data
infile ‘input.txt‘
append into table student --这里用的Append.
fields terminated by "," --这里表示逗号分割。
(SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)

这里用的Append, 追加数据,还有几个其他的参数:

a,insert,为缺省方式,在数据装载开始时要求表为空

b,append,在表中追加新记录

c ,replace,删除旧记录,替换成新装载的记录

d,truncate,同上

3,sqlldr 调用控制文件

sqlldr username/[email protected] control =input.ctl             //input.ctl 为控制文件

在这里需要提下,这里是会生成日志文件,默认为文件名文件名+.log. 当前为 input.log

如果执行失败了,会生成bad file. 如果在当前执行中错误,会生成input.bad file。

下面指定Log 和bad 文件,当然可以加上路径

sqlldr userid=username/password@database control=input.ctl log=input.log bad=input.bad  SILENT=(HEADER, FEEDBACK)

SILENT=(HEADER, FEEDBACK) 控制端不显示信息,例如下面的信息将不再控制端显示。只在日志文件中

Record 4: Rejected - Error on table EMP
ORA-00001: unique constraint <name> violated

当然是可以显示指定的。


load data
infile input.txt
badfile t.bad
discardfile t.dsc
append into table student
fields terminated by ","
(SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)

看看日志文件:input.log

SQL*Loader: Release 10.2.0.1.0 - Production on Tue May 20 17:36:52 2014

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Control File: input1.ctl
Data File: input1.ctl
Bad File: input1.bad
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional

Table STUDENT, loaded from every logical record.
Insert option in effect for this table: APPEND

Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
SNAME FIRST * , CHARACTER
SAGE NEXT * , CHARACTER
SEMAIL NEXT * , CHARACTER
SPHONE NEXT * , CHARACTER
SADDRESS NEXT * , CHARACTER

Table STUDENT:
1 Row successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.

Space allocated for bind array: 82560 bytes(64 rows)
Read buffer bytes: 1048576

Total logical records skipped: 0
Total logical records read: 1
Total logical records rejected: 0
Total logical records discarded: 0

Run began on Tue May 20 17:36:52 2014
Run ended on Tue May 20 17:36:52 2014

Elapsed time was: 00:00:00.05
CPU time was: 00:00:00.04

4,查看数据库

到此一个简单的例子完成,从一个文本文件导入到数据库。

文件可以为不同格式文件,.dat,.csv都可以的。

C,sqlldr直接在控制文件中导入数据。


load data
infile *
append into table student
fields terminated by ","
(SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)
begindata
20,20,abc@gmail.com,20,address --这里是数据

D,当文件数据是以绝对位置分开的,我们可以直接截取。当然,截取的开始与结束必须小心了。


load data
infile t.dat
append into table student
(SNAME position(01:20),
SAGE position(21:23) ,
SEMAIL position(41:60),
SPHONE position(61:80),
SADDRESS position(81:100)
)

t.dat 文件


Jack                12                  abc@gmail.com       134998879           Singapore
Jack2 12 abc@gmail.com 134998879 Singapore
Jack3 12 abc@gmail.com 134998879 Singapore
Jack4 12 abc@gmail.com 134998879 Singapore
Jack5 12 abc@gmail.com 134998879 Singapore
Jack6 12 abc@gmail.com 134998879 Singapore
Jack7 12 abc@gmail.com 134998879 Singapore

还数据在Load to database 的时候,load的数据是可以改变的。


LOAD DATA
INFILE *
INTO TABLE modified_data
( rec_no "my_db_sequence.nextval",
region CONSTANT ‘31‘,
time_loaded "to_char(SYSDATE, ‘HH24:MI‘)",
data1 POSITION(1:5) ":data1/100",
data2 POSITION(6:15) "upper(:data2)",
data3 POSITION(16:22)"to_date(:data3, ‘YYMMDD‘)"
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112

这里有很多命令的解释

这里有很多问题的回答(FAQ

简单实现几个例子,稍后有时间添加多点理论知识,再边学习边完善了。

Oracle Sql Loader的学习使用

时间: 2024-12-03 05:25:22

Oracle Sql Loader的学习使用的相关文章

[Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

sqlldr工具 SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需要对下面的参数死记硬背,当你忘记它们时,可以通过这个方式快速查询. [plain] view plain copy print? Valid Keywords: userid -- ORACLE username/password control -- control file name log -- 

[Oracle] SQL*Loader 详细使用教程(3)- 控制文件

控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置.数据的格式.以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件.   在控制文件里配置命令行参数 (OPTIONS) 在上一篇中我们讲过命令行参数可以配置在三个地方,其中一个就是可以使用控制文件的OPTIONS字句(这也是最常用的方式),如下所示: OPTIONS (DIRECT=true, SILENT=(ERRORS, FEEDBACK) ) 更多的命令行参数,请见上一篇.  

[Oracle] SQL*Loader 详细使用教程(4)- 字段列表

在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子,本篇我们将一一讲解它们的意思. . . . 1 (hiredate SYSDATE, 2 deptno POSITION(1:2) INTEGER EXTERNAL(2) NULLIF deptno=BLANKS, 3 job POSITION(7:14) CHAR TERMINATED BY W

[Oracle] SQL*Loader 详细使用教程(1)- 总览

SQL*Loader原理 SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高.其示意图如下: 控制文件(Control File) (.ctl):用于控制数据导入的行为方式的文件(最重要的文件) 参数文件(可选)(Parameter File) (.par):可以把参数直接写在控制文件里,也可以单独写一个参数文件 数据文件(Data Files) :放置源数据的平面文件(可以一次

oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)

1.准备表数据 select * from emp10; create sequence seq_eseq increment by 1 start with 1001 maxvalue 999999999; --得到序列的SQL语句 select seq_eseq.nextval from sys.dual; --删除序列的SQL DROP SEQUENCE seq_eseq: create table emp10( empno number(4) primary key, ename var

SQL*Loader数据装载工具入门_超越OCP精通Oracle视频课程培训24

oracle视频教程目标     Oracle视频教程,风哥本套oracle教程培训学习Oracle SQL*Loader概念及用法及SQL*Loader两个案例,同时课件带有近20个案例用于大家自行练习.适用人群IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址:http://edu.51cto.com/course/course_id-6987.html Oracle视频教程简介本课程介绍:Oracle视频教程,风哥本套oracle教程培训学习Ora

IT忍者神龟之Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中 2. 建立数据库间的 dblink,然后用 create table B as select * from [email protected] where ...,或 insert into B select * from [email protected] where ... 3. exp A 表,再 imp 到

SQL*Loader 详解

在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 dblink,然后用 create table B as select * from [email protected] where ...,或 insert into B select * from [email protected] where ...3. exp A 表,再 imp 到 B

SQL*Loader之CASE1

最近项目涉及到将文本文件中的数据导入到Oracle数据库中,故研究了下SQL*Loader,官档提供的资料不是很丰富,很多案例中出现的语句在官档中找不到出处.但它提供的案例本身却彰显出了SQL*Loader功能的强大.鉴于Oracle 11g的软件本身没有携带这些案例,需要专门到官方网站下载Oracle Database 11g Release 2 Examples,甚是麻烦.在此,将这些案例分享,也方便以后研究.借鉴. 因官方文档还没有研究完,手里还有本<Oracle SQL*Loader: