您的位置:首页 > 数据库

sql loader的用法简介

2015-11-24 15:23 615 查看
转自: http://www.cnblogs.com/HondaHsu/archive/2008/12/01/1345344.html
sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,

是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。

缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。

用法: SQLLDR keyword=value [,keyword=value,...]

有效的关键字:

userid -- ORACLE username/password

control – 控制文件

log – 记录的日志文件

bad – 坏数据文件

data – 数据文件

discard – 丢弃的数据文件

discardmax – 允许丢弃数据的最大值 (全部默认)

skip -- Number of logical records to skip (默认0)

load -- Number of logical records to load (全部默认)

errors – 允许的错误记录数 (默认50)

rows -- Number of rows in conventional path bind array or between direct path data saves

(每次提交的记录数,默认: 常规路径 64, 所有直接路径)

bindsize -- Size of conventional path bind array in bytes(默认256000)

每次提交记录的缓冲区的大小(字节为单位,默认256000)

silent --禁止输出信息 (header,feedback,errors,discards,partitions)

direct – 使用直通路径方式导入 (默认FALSE)

parfile -- parameter file: name of file that contains parameter specifications

parallel -- 并行导入 (默认FALSE)

file -- File to allocate extents from

与bindsize成对使用,其中较小者会自动调整到较大者

sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。

external_table

-- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默认NOT_USED)

columnarrayrows

-- Number of rows for direct path column array(默认5000)

streamsize -- Size of direct path stream buffer in bytes(默认256000)

multithreading

-- use multithreading in direct path

resumable -- enable or disable resumable for current session(默认FALSE)

resumable_name

-- text string to help identify resumable statement

resumable_timeout

-- wait time (in seconds) for RESUMABLE(默认7200)

date_cache -- size (in entries) of date conversion cache(默认1000)

注意:有两种方式可以指定命令行参数:通过位置或者通过关键字。前者的例子:'sqlldr scott/tiger foo';

后者的例子:'sqlldr control=foo userid=scott/tiger';

不能前面使用关键字指定后面通过位置制定的混合方式;

比如:'sqlldr scott/tiger control=foo logfile=log' 是允许的,

但'sqlldr scott/tiger control=foo log'不允许。

为清楚起见最好所有命令行参数都用关键字指定。

控制文件:

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

LOAD DATA

INFILE 't.dat' 要导入的文件

// INFILE 'tt.date' 导入多个文件

// INFILE * 表示要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容

INTO TABLE table_name 指定装入的表

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

************* 以下是4种装入表的方式

APPEND 原先的表有数据 就加在后面

INSERT 装载空表 如果原先的表有数据 sqlloader会停止 默认值

REPLACE 原先的表有数据 原先的数据会全部删除

TRUNCATE 指定的内容和replace的相同 会用truncate语句删除现存数据

************* 指定分隔符

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

// TERMINATED BY WRITESPACE 以空白分割

TRAILING NULLCOLS 表的字段没有对应的值时允许为空

************* 下面是表的字段

(

col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载

// 如: lg,lg,not 结果 lg lg

)

如果没声明FIELDS TERMINATED BY ',' 时,可以用下面两种方式实现同样功能:

1.为每一列指定分隔符

(

col_1 [interger external] TERMINATED BY ',' ,

col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,

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) // 指定字段的类型

)

BEGINDATA 对应开始的 INFILE * 要导入的内容就在control文件里

10,Sql,what

20,lg,show
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: