sqlldr处理格式化数据

本文介绍如何使用SQL Loader (sqlldr) 直接从大量日志文件中批量导入数据到Oracle数据库,并通过示例展示如何创建统计表、汇总表及备份当前表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 server每天都产生一大批日志需要导入test数据库user用户下。本来想在机器上用shell直接分析,但是量太大了,一天1千多万条,不方便统计汇总,用sqlldr导入比较方便。就拿来用了。

sqlldr主要用了direct=true的选项,速度和不用没法比。^_^,1个文件100多万条记录就几秒钟。

-- 每天code统计表
create table code_stat(pid VARCHAR2(32),CODE VARCHAR2(32),status VARCHAR2(2));

-- 汇总表

create table code_stat_sum(stat_day VARCHAR2(8),CODE VARCHAR2(32),COUNT NUMBER(24));

sqlldr的control file
stdo.ctl
##############################
load data
APPEND INTO TABLE code_stat
(pid char(32) terminated by ']',
code char(32) terminated by whitespace,
status char(32) terminated by whitespace)
##############################

data从命令行输入


for i in `ls data/info.out.20081211*`;do
echo ===`wc -l $i`===
sqlldr userid=user/password@test control=stdo.ctl data=$i log=stdo.log bad=bad.log direct=true
done

sqlplus user/password@test<<!
INSERT INTO code_stat_sum SELECT '20081211', code, COUNT(*) FROM code_stat WHERE status='B' GROUP BY code;
commit;
exit
!

# backup current table to history table, create a new one.
sqlplus user/password@test<<!
RENAME code_stat TO code_stat_20081211;
create table code_stat(pid VARCHAR2(32),code VARCHAR2(32),status VARCHAR2(2));
commit;
exit
!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值