Merhaba bu yazıda Goldengate proseslerini takip ederek lag oluştuğunda veya herhangi bir proses running haricinde bir duruma düştüğünde mail gönderen bir bash script hazırlamaya çalışacağız, sonrasında ise disklerimizi kontrol edip eğer disk doluluk %90 üzerine çıkarsa yine mail gönderen başka bir script daha hazırlamaya çalışacağız.
Öncelikle goldengate process lerimizi bir kontrol edelim
> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING RIDBA 00:00:06 00:00:08
REPLICAT RUNNING RNYAA 00:00:00 00:00:07
REPLICAT RUNNING RNYB 00:00:08 00:00:08
REPLICAT RUNNING RSARP 00:00:00 00:00:05
REPLICAT RUNNING RUDD 00:00:06 00:00:03
Bu çıktıya göre bash scriptimizi hazırlayalım; Aşağıdaki scripte ben .bash_profile değişkenlerinin hepsini copy paste yaptım ama hepsine ihtiyacımız yok Goldengate info all komutunun çalışması için hangi ortam değişkenlerinin set edilmesi gerekiyorsa onların yazılması aslında yeterli.
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=******
export ORACLE_UNQNAME=*****
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19.0.0.0/grid
export DB_HOME=$ORACLE_BASE/product/19.0.0.0/db
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=***
export ORACLE_TERM=xterm
export OGG_HOME=/u02/ogg/oggtrg
export BASE_PATH=/usr/sbin:$PATH
export JAVA_HOME=/u02/java/jdk1.8.0_29
export PATH=$ORACLE_HOME/bin:$OGG_HOME:$JAVA_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
DBA_EMAIL=fcevik@ttnet.com.tr
logpath="/tmp"
cd $logpath
logfile="$logpath/output_lag.txt"
# Output GG information to log file
echo 'INFO ALL' | /u02/ogg/oggtrg/ggsci > $logfile
cat $logfile | egrep 'MANAGER|EXTRACT|REPLICAT'| tr ":" " " | while read LINE
do
case $LINE in
*)
PROCESS_TYPE=$(echo $LINE | awk -F" " '{print $1}')
PROCESS_STATUS=$(echo $LINE | awk -F" " '{print $2}')
PROCESS_NAME=$(echo $LINE | awk -F" " '{print $3}')
LAG_HH=$(echo $LINE | awk -F" " '{print $4}')
LAG_MM=$(echo $LINE | awk -F" " '{print $5}')
LAG_SS=$(echo $LINE | awk -F" " '{print $6}')
MES_BODY="A-)"
let "lag_sec=LAG_SS+1"
let "lag_min=LAG_MM+1"
let "lag_hou=LAG_HH+1"
if [ "$PROCESS_STATUS" != "RUNNING" ]
then
mail -s "GoldenGate Process Not RUNNING on for database $ORACLE_SID" $DBA_EMAIL
else
if [[ $lag_hou -gt 1 ]] || [[ $lag_min -ge 5 ]]
then
$MES_BODY+='ALERT ... Goldengate process $PROCESS_TYPE($PROCESS_NAME) has a lag of "$LAG_HH" hour "$LAG_MM" min on ($ORACLE_SID) \n'
cat $logfile | mail -s "ALERT ... Goldengate process \"$PROCESS_TYPE($PROCESS_NAME)\" has a lag of "$LAG_HH" hour "$LAG_MM" min on `uname -n`($ORACLE_SID)" $DBA_EMAIL
fi
fi
esac
done
Şimdi ise bu scripte ilgili çalıştırma iznini veriyoruz ve oracle userında crontab a ekliyoruz. Crontab ile ilgili olarak aşağıdaki yazıya bakabilirsiniz. Ayrıca bash script ile ilgili de yine aşağıdaki makalelerden faydalanabilirsiniz;
5 dakikada bir çalışacak şekilde crona ekeleyip kaydedip çıkıyoruz.
crontab -e
*/5 * * * * /home/oracle/OGG_LAG.sh > /dev/null 2>&1
https://alisezisli.com.tr/tag/bash-script/ (Desteklerinden dolayı Ali Sezişli’ye teşekkür ederim…)
Şimdi ise disk kontolleri, için aşağdaki scripti ekleyelim
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge 90 ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
/usr/bin/mail -s "Uyari: Syslog Sistem Diski Dolmak Uzere $usep%" y.farukcevik@gmail.com
fi
done
Bunu da crontaba ekleyelim bu scriptimizda saat başı çalışsın
0 * * * * /ACFS/scripts/check_disk.sh
Bir yanıt yazın