Oracle log 每次切换会记录到告警日志中 设想写个方案来查看log切换频率来判断Oracle log是否应该更改大小..
该文章可用于对数据库的监控检查脚本.. 如果脚本中输出时间间隔在10分钟之内 或者更短的话说明您的logfile 过小或者事务数/量过大
具体思路和脚本如下:
思路:
1)读取Oracle告警文件名称 --> 为方便所有环境 将会用到Oracle 的环境变量中的$ORACLE_BASE/$ORACLE_SID 实现步骤如‘蓝色字样’
2)文件找到 要读取当天log切换,由于每个操作系统的/etc/sysconfig/i18n显示时间格式不一,所以没有用date 读取
以下脚本 是利用Linux基本命令实现读取系统上当天Oracle log切换频率,实现步骤如‘绿色字样’
实现步骤:..一个为例
1、查看oracle 参数文件
[root@kfdb ~]# grep ORACLE_BASE= /home/oracle/.bash_profile
export ORACLE_BASE=/oradata2/app/oracle
2、查看该环境变量 为空
[root@kfdb ~]# echo $ORACLE_BASE
3、设定环境变量 ORACLE_BASE
[root@kfdb ~]# ORACLE_BASE=`grep ORACLE_BASE= /home/oracle/.bash_profile `
检查:
[root@kfdb ~]# echo $ORACLE_BASE
export ORACLE_BASE=/oradata2/app/oracle
4、执行export环境变量
[root@kfdb ~]# $ORACLE_BASE
检查是否生效:
[root@kfdb ~]# echo $ORACLE_BASE
/oradata2/app/oracle
[root@kfdb ~]#
|
脚本如下:
#/bin/sh
ORACLE_BASE=`grep ORACLE_BASE= /home/oracle/.bash_profile `
ORACLE_SID=`grep ORACLE_SID= /home/oracle/.bash_profile `
$ORACLE_BASE
$ORACLE_SID
cd $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/
d=`grep -A 2 "LGWR switch" alert_$ORACLE_SID.log | tail -10| grep -v Current|grep -v Thread | tail -1|awk -F ' ' '{print $1,$2,$3}'`
grep -A 2 "LGWR switch" alert_$ORACLE_SID.log | grep -A 3 "$d" > /root/"$d".log
cd /root
grep "$d" "$d".log
#可以选择不删除 rm -rf "$d".log
#wc=`grep "$d" "$d".log|wc -l` wc 查看结果总条目
#bc=`echo $wc-1|bc bc计算器
#grep "$d" "$d".log| head -$wc
注释:
$ORACLE_SID/ORACLE_BASE : 执行上面的结果
d: 查出系统时间
grep -v:过滤掉 ... 是因为可能存在alter system switch logfile;将原放在最后行的日期更换
grep .... 显示准确的log切换时间...grep -A 3 "$d" 过滤掉了命令切换没有写内容的log 将是log切换频率的结果
|
|
SQL:
select b.SEQUENCE#,
b.FIRST_TIME,
a.SEQUENCE#,
a.FIRST_TIME,
round(((a.FIRST_TIME - b.FIRST_TIME) * 24) * 60, 2)
from v$log_history a, v$log_history b
where a.SEQUENCE# = b.SEQUENCE# + 1
and b.THREAD# = 1
order by a.SEQUENCE# desc;
谢谢大家阅读~
希望对您有帮助~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28602568/viewspace-1125506/
,如需转载,请注明出处,否则将追究法律责任。