日常工作中的,对oracle数据库的日志巡检是重要的一环,及时发现日志中的alert问题告警,提早发现,及时干预处理就变得尤为重要。
一般我们会直接登陆数据库服务器直接查看,但是存在两个小小的问题:
1、日志目录隐藏比较深,想要查找不太方便,特别是遇到多实例的情况,需要不断地切换目录,这点我们可以在环境变量里面使用alias别名的方式来精准直达目录,例如:
alias alert1='cd /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/;tail -100f alert_ORCL1.log'
alias alert2='cd /u01/app/oracle/diag/rdbms/orcl/ORCL2/trace/;tail -100f alert_ORCL2.log'
2、如果是很多数据库服务器需要管理,或者我们要批量查看或者进行错误日志收集的的话,就显得有些力不从心,那么以下小脚本就派上用场了。
话不多说,直接上代码:
[oracle@node01 script]$ cat 12c_log_error_check.sh
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle ##声明ORACLE_BASE环境变量
export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/dbhome_1 ##声明ORACLE_HOME环境变量
oracle_sids=$(ps -ef|grep "ora_pmon_"|grep -v grep|sed -e 's/ora_pmon_//g'|grep -v sed|awk '{printf $8","}')
###############检查最近5000条日志是否有错误####################
for alterid in ${oracle_sids//,/ }; do
export ORACLE_SID=$alterid
select_alert_sql=" select value from v\$diag_info where name='Diag Trace';"
DB_ALTER=`sqlplus -S / as sysdba << EOF
set linesize 200 pagesize 200
set pages 0
set head off
set feed off
${select_alert_sql}
exit;
EOF`
echo "The $alterid database arter_log is ${DB_ALTER}/alert_${alterid}.log"
ALERT_LOG="${DB_ALTER}/alert_${alterid}.log"
error_count=$(tail -5000 $ALERT_LOG |grep -i ora-)
if [ -n "$error_count" ]
then
echo "The $alterid err is $error_count"
else
echo "The $alterid no err"
fi
done
然后给脚本授权:
chown oracle:oinstall 12c_log_error_check.sh
chmod +x 12c_log_error_check.sh
查看脚本属主及权限:
ll 12c_log_error_check.sh
-rwxr-xr-x 1 oracle oinstall 1122 Apr 4 15:40 12c_log_error_check.sh
最终执行效果如下:
[oracle@node01 script]$ sh 12c_log_error_check.sh
The ORCL1 database arter_log is /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/alert_ORCL1.log
The ORCL1 no err




