oracle中sqlldr和sqlplus使用
一、简介
sqlldr和sqlplus是oracle下的命令行工具,均位于/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/目录下,sqlldr可用于数据的导入,sqlplus可直接执行sql命令,sqlplus结合spool命令可对数据导出。下面分别介绍。
二、sqlldr
sqlldr可用与数据的导入。
2.1 sqlldr使用
2.1.1 sqlldr命令
sqlldr命令格式如下:
SQLLDR keyword=value [,keyword=value,...]
核心参数有:
userid:用户名密码等,格式: username/password[@servicename]
control:控制文件
log:日志文件
data:数据文件
bad:坏数据文件
discard:丢弃数据文件
discardmax:丢弃数据最大值,默认全部
error:允许出错的记录数,默认50
rows:多少条记录提交一次,默认64
skip:跳过开头的多少条记录,默认0
skip_index_maintenance:设置索引失效skip_index_maintenance=true, 注意使用后需要重建索引
bindsize:每次提交记录的缓冲区大小,单位字节,默认25600
readsize:每次读取记录的缓冲区大小,单位字节,默认1048576
silent:禁止输出信息(如header,feedback,errors,discards,partitions等)
direct:使用直通路径方式导入,默认false
parallel: 并行导入(注意:parallel并不是一个sqlldr同时起多个线程加载数据,而是不锁住加载表,允许别的路径加载。正确使用方式是同时用多个sqlldr加载数据)
更详细参数通过命令:
bin/sqlldr
2.1.2 控制文件
示例控制文件stu.ctl如下:
-- 控制文件stu.ctl
options(skip=1,rows=128) --sqlldr命令显示,skip=1表示跳过第一行
load drop database infile 'x1.csv' 'x2.csv' --导入的外部文件,可以多个。设置为*表示数据就在当前控制文件中
truncate --清除表中原有数据, 还可填值,insert:插入(表一开始为空);append:追加记录 replace:删除(delete from xxx)旧记录,插入新记录; truncate:删除(truncate table xxx)旧记录,插入新记录; 默认insert
into table stu --要插入的表
fields terminated by ',' --每行记录各字段间用逗号分割
optionally enclosed by "'" --每个字段用单引号括起
trailing nullcols --字段没值时允许为null
(
virtual_column filler, --虚拟字段,用于跳过pl/sql 生成的第一列序号
id int primary key,
no varchar(30) DEFAULT '',
name varchar(60) DEFAULT '',
)
begindata --以下为数据
9001,banana1
2.2 sqlldr示例
2.2.1 数据在控制文件中
控制文件stu.ctl如下:
options(skip=1,rows=128) --sqlldr命令显示,skip=1表示跳过第一行
load data infile * --导入的外部文件,可以多个
append
into table stu --要插入的表
fields terminated by ',' --每行记录各字段间用逗号分割
trailing nullcols --字段没值时允许为null
(no,name)
begindata --以下为数据
no,name
9001,banana1
9002,banana2
9003,banana3
执行命令:
#数据直接在控制文件中
/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/sqlldr userid=school_user/root control=stu.ctl
2.2.2 数据在控制文件内指定的数据文件中
控制文件stu1.ctl如下:
load data infile 'stu1.csv' --导入的外部文件,可以多个
append
into table stu --要插入的表
fields terminated by ',' --每行记录各字段间用逗号分割
trailing nullcols --字段没值时允许为null
(
no,
name