shell脚本之分析oracle数据库数据泵日志中表的大小

时间:2021-02-16 15:08:00

1、分析日志格式如下

. . imported "xxx_330508"."xxx_T_DATA" 46.17 MB 268 rows

. . imported "xxx_330508"."xxx_T_CAUSERLOG" 24.74 MB 72246 rows

. . imported "xxx_330508"."xxx_T_UIQUERYFORM" 23.98 MB 124432 rows

. . imported "xxx_330508"."P#xxx_T_PAPAGE" 23.82 MB 102843 rows

. . imported "xxx_330508"."yyyyy" 15.90 MB 8946 rows

这里我主要关注红色部分的总和。

2、用于分析上述日志的shell脚本如下:

# vi oracle_ayalyze_dpfile.sh

#!/bin/sh

#echo -n "Please input analyze filename:"

#read filename

val01=`egrep -o "([0-9\.0-9]+? GB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0*1024*1024}END{print sum}' | awk '{print $0*1}'`

val02=`egrep -o "([0-9\.0-9]+? MB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0*1024}END{print sum}' | awk '{print $0*1}'`

val03=`egrep -o "([0-9\.0-9]+? KB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0}END{print sum}' | awk '{print $0*1}'`

val=`echo "$val01+$val02+$val03" | bc`

val=`echo "scale=2;$val/1024/1024" | bc`

echo $val"GB"

测试:

# /home/oracle/oracle_ayalyze_dpfile.sh /u01/app/oracle/admin/orcl/dpdump/db_xc161125.log

12.37GB

解释:

1)egrep -o "([0-9\.0-9]+? GB)" $1 -- 使用egrep查找匹配数据,egrep默认支持正则表达式,grep不支持正则,除非指定参数-E,参数-o表示仅返回匹配字段值,否则返回整行数据。"([0-9\.0-9]+? GB)"这部分是正则规则,目的匹配日志中红色字段内容,$1表示分析文件通过参数方式传递。

2)egrep -o "([0-9\.0-9]+?)" -- 在上一步分析的基础上去掉单位

3)awk '{sum+=$0*1024*1024}END{print sum}' --使用awk对上一步的分析结果做一个求和的操作,即sum。

4)awk '{print $0*1}' --为了防止大数字使用科学计数法表示

5)val=`echo "$val01+$val02+$val03" | bc` --对上面计算出的3个结果进行一个求和操作,单位为kb

6)val=`echo "scale=2;$val/1024/1024" | bc` --将单位为kb的结果转换为单位为gb的结果

7)echo $val"GB" --输出结果,打印在控制台