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
!
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
!