sql loader的使用

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)
);

cat input.txt
12,12,[email protected],12,address
13,13,[email protected],13,address
14,14,[email protected],14,address
15,15,[email protected],15,address
16,16,[email protected],16,address
17,17,[email protected],17,address
18,18,[email protected],18,address
19,19,[email protected],19,address

2,控制文件
cat input.ctl
load data
infile ‘input.txt’
append into table student
fields terminated by “,”
(SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)

这里用的Append, 追加数据,还有几个其他的参数:
a,insert,为缺省方式,在数据装载开始时要求表为空
b,append,在表中追加新记录
c ,replace,删除旧记录,替换成新装载的记录
d,truncate,同上

3,sqlldr 调用控制文件
sqlldr username/password@database control=input.ctl log=input.log bad=input.bad

当然是可以显示指定的。
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 © 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,[email protected],20,address
21,21,[email protected],21,address
22,22,[email protected],22,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 [email protected] 134998879 Singapore
Jack2 12 [email protected] 134998879 Singapore
Jack3 12 [email protected] 134998879 Singapore
Jack4 12 [email protected] 134998879 Singapore
Jack5 12 [email protected] 134998879 Singapore
Jack6 12 [email protected] 134998879 Singapore
Jack7 12 [email protected] 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

可以将多个文件导入到同一个表或者多个表中

load data
infile t1.dat
infile t2.dat
infile t3.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)
)

使用sqlldr 生成创建外部表的语法
https://wenku.baidu.com/view/f922992c0722192e4536f644.html

猜你喜欢

转载自blog.csdn.net/weixin_44524950/article/details/86536787