
sqlldr命令参数说明
userid -- ORACLE 用户名/口令
control -- 控制文件名
log -- 记录导入时的日志文件.log
bad -- 坏数据文件.bad
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
discard -- 废弃文件名
discardmax --允许废弃的文件的数目(默认全部)
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)
INSERT --向表中插入数据,表必须为空,默认就是INSERT参数
APPEND --向表中追加数据
REPLACE --替换表中数据,相当于先DELETE表中全部数据,然后再INSERT
TRUNCATE --类似REPLACE,通过TRUNCATE的方式删除,然后再INSERT
Oracle数据库sqlldr脚本
#!/bin/bash
#先生成示例文件demo.ctl
#再用sqlloader导数据
ORACLE_HOME=/app/oracle/oracleclient
export ORACLE_HOME
PATH=$PATH:$ORACLE_HOME/bin
export PATH
echo "----开始执行loaddemo.sh文件----"
echo "----开始生成demo.ctl文件----"
echo "参数:$1"
echo "参数:$2"
echo "
LOAD DATA
CHARACTERSET AL32UTF8
INFILE '/解析文件路径/$2'
DISCARDFILE '/bad文件生成路径/demo.bad'
INTO TABLE 数据库表名
REPLACE
FIELDS TERMINATED BY '|@|'
trailing nullcols
(表字段1,
表字段2,
表字段3,
表字段4,
表字段5)
" > ctl文件生成路径/demo.ctl
echo "----demo.ctl文件已生成----"
echo "----开始导入demo数据----"
rmsg1=`sqlldr userid=用户名/密码@ip/数据库实例名 control=/ctl文件生成路径/demo.ctl log=/log文件生成路径/demo.log`
echo "----导入demo数据完成----"
echo "----loaddemo.sh执行完成----"
MySQL数据库loaddata脚本
# !/bin/bash
datestr=$1
file=$2
load_data_log=log文件生成路径/demo.log
load_sql="LOAD DATA LOCAL INFILE '/解析文件路径/${datestr}/${file}'
INTO TABLE 数据库表名称
CHARACTER SET gbk
FIELDS TERMINATED BY '|@|'
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '|+|\n'"
mysql -root -p'root' -h127.0.0.1 -P3600 -vv --local-infile=1 << EOF >${load_data_log}
use root;
$load_sql;
exit
EOF
echo "$?"
exit
Java调用shell脚本方法
public class JavaShellUtil {
private final static Log log = LogFactory.getLog(JavaShellUtil.class);
public int importData(String path_sh, String tranDate, String fileName) {
int status = 0;
try {
log.info("执行shell: " + path_sh);
String[] path = new String[] { "sh", path_sh, tranDate, fileName };
Process pro = Runtime.getRuntime().exec(path);
status = pro.waitFor();
if (status != 0) {
log.info("Failed to call shell's command");
throw new Exception(path_sh + " shell脚本运行出错!");
}
BufferedReader br = new BufferedReader(new InputStreamReader(
pro.getInputStream(),"utf-8"));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String result = sb.toString();
log.info("result:" + result);
} catch (Exception e) {
// TODO: handle exception
log.info("数据加载失败");
e.printStackTrace();
return status;
}
log.info("数据加载成功");
return status;
}
}
— End —
文章转载自TNodes,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




