监控DG脚本

#监控DG脚本

##源端脚本

**monitor_doic.sh **

/home/oracle/scripts/monitor.sh /home/oracle/scripts/doic_profile doic stddoic

monitor.sh

PF=$1
SID=$2
CS=$3
export STATE=0
export RSTATE=0
LOGFILE=monitor_${SID}.log
ET=`date +"%y-%m-%d %T"`
PDBSTAT=`/home/oracle/scripts/ora_database_stat.sh $SID`
if [ $PDBSTAT -eq 1 ]
then
     STATE=64
     echo ${ET}"||"${SID}"||"DATAGUARD"||"${STATE} >/home/oracle/scripts/log/${LOGFILE}
     exit
fi

MAX_SEQ=`/home/oracle/scripts/query_max_sequence.sh $PF`
PRE_SEQ=`expr $MAX_SEQ - 1`
AC=`/home/oracle/scripts/query_remote_archivedlog.sh $PF $CS $PRE_SEQ`
if [ $AC -eq 1 ]
then
        STATE=`expr $STATE + 0`
else
        STATE=`expr $STATE + 1`
fi
. /home/oracle/scripts/tnsping.sh $PF $CS
RSTATE=`rsh BKdoicPRD01 /home/oracle/scripts/std_monitor.sh $PF $SID $CS $MAX_SEQ`
STATE=`expr $STATE + $RSTATE`
if [ $STATE -eq 0 ]
then
        echo ${ET}"||"${SID}"||"DATAGUARD"||"S >/home/oracle/scripts/log/${LOGFILE}
else
        echo ${ET}"||"${SID}"||"DATAGUARD"||"${STATE} >/home/oracle/scripts/log/${LOGFILE}
fi

doic_profile

JAVA_HOME=/usr/java5

export JAVA_HOME

PATH=$JAVA_HOME/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:/home/oracle/software/apach
e-ant-1.7.1/bin:.

export PATH

ORACLE_SID=doic
ORACLE_HOME=/oracle/product/10.2.0
PATH=$PATH:$ORACLE_HOME/bin:.:/user/local/bin
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export NLS_LANG
umask=022
export PATH
export RACLE_BASE

export ORACLE_SID
export ORACLE_HOME

ora_database_stat.sh

SID=$1
DBSTAT=0
for p in `cat /home/oracle/scripts/monitor_db_processes.txt`
do
        PR=${p}_${SID}
        ps -ef |grep ${PR}|grep -v grep >/dev/null
        if [ $? -ne 0 ]
        then
                DBSTAT=1
                break
        fi

done
echo $DBSTAT

query_max_sequence.sh

PF=$1
. ${PF}
sqlplus -S "/ as sysdba" <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
  select max(sequence#) from v\$archived_log;
EOF

query_remote_archivedlog.sh

PF=$1
CS=$2
SEQ=$3
. ${PF}
sqlplus -S "/ as sysdba" <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
  select count(sequence#) from v\$archived_log
        where sequence#=$SEQ and name='$CS';
EOF

##目标端脚本

std_monitor.sh

PF=$1
SID=$2
CS=$3
MAX_SEQ=$4
RSTATE=0
DBSTAT=`/home/oracle/scripts/ora_database_stat.sh $SID`
if [ $DBSTAT -eq 1 ]
then
     RSTATE=`expr $RSTATE + 32`
     echo $RSTATE
     exit
else 
     RSTATE=`expr $RSTATE + 0`
fi

SEQ=`expr ${MAX_SEQ} - 1`
APL=`/home/oracle/scripts/std_archivedlog_applied.sh $PF $SEQ`
if [ $APL -eq 1 ]
then
     RSTATE=`expr $RSTATE + 0`
else
     RSTATE=`expr $RSTATE + 4`
fi
GAP=`/home/oracle/scripts/std_archivelog_gap.sh $PF`
if [ $GAP -eq 0 ]
then
     RSTATE=`expr $RSTATE + 0`
else
     RSTATE=`expr $RSTATE + 8`
fi
MRP=`/home/oracle/scripts/std_mrp_process.sh $PF`
if [ $MRP -eq 0 ]
then
     RSTATE=`expr $RSTATE + 16`
else
     RSTATE=`expr $RSTATE + 0`
fi

echo $RSTATE

ora_database_stat.sh

SID=$1
DBSTAT=0
for p in `cat /home/oracle/scripts/monitor_db_processes.txt`
do 
        PR=${p}_${SID}
        ps -ef |grep ${PR}|grep -v grep >/dev/null
        if [ $? -ne 0 ]
        then
                DBSTAT=1
                break
        fi
        
done
echo $DBSTAT

std_archivedlog_applied.sh

PF=$1
. ${PF}
SEQ=$2
sqlplus -S "/ as sysdba" <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
  select count(sequence#) from v\$archived_log
        where sequence#=${SEQ} and applied='YES';
EOF

std_archivelog_gap.sh

PF=$1
. ${PF}
sqlplus -S "/ as sysdba" <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
  select count(*) from v\$archive_gap;
EOF

std_mrp_process.sh

PF=$1
. ${PF}
sqlplus -S "/ as sysdba" <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
select count(program) from v\$process 
        where program like '%(MRP0)%';
EOF

##删除备库归档日志脚本

archived_log.sh

cd /home/oracle/scripts/doic/temp
. /home/oracle/scripts/doic/doic_profile
sqlplus "/ as sysdba" <<EOF
@/home/oracle/scripts/doic/archived_log.sql
EOF
grep "ORACLE not available" /home/oracle/scripts/doic/archived_log.txt >>/dev/null
if [ $? = 0 ]
then
        exit
fi

grep "database not mounted" /home/oracle/scripts/doic/archived_log.txt >>/dev/null
if [ $? = 0 ]
then
        exit
fi

grep "select" /home/oracle/scripts/doic/archived_log.txt >>/dev/null
if [ $? = 0 ]
then
        exit
fi

grep "*" /home/oracle/scripts/doic/archived_log.txt >>/dev/null
if [ $? = 0 ]
then
        exit
fi

grep "ERROR" /home/oracle/scripts/doic/archived_log.txt >>/dev/null
if [ $? = 0 ]
then
        exit
fi

for logname in `cat /home/oracle/scripts/doic/archived_log.txt`
do
if [ -f $logname ]
then
        echo "rm $logname" 
        rm $logname
fi
done

doic_profile

PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.

export PATH

if [ -s "$MAIL" ]           # This is at Shell startup.  In normal
then echo "$MAILMSG"        # operation, the Shell checks
fi                          # periodically.
ORACLE_SID=doic
export ORACLE_SID
ORACLE_HOME=/oracle/product/10.2.0
export ORACLE_HOME
PATH=$PATH:$ORACLE_HOME/bin:.:/user/local/bin
export PATH
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export NLS_LANG
PS1=`hostname`$
export PS1
umask=022

archived_log.sql

set echo off
set feedback off
set pagesize 0
set linesize 80
set verify off
set term off
set trims off
set heading off
set timing off
column name format a80
spool /home/oracle/scripts/doic/archived_log.txt
select name from v$archived_log 
        where  exists (select database_role from v$database where  trim(database_role)='PHYSICAL STANDBY') and applied='YES' and trim(name)<>'doic' and completion_time<=sysdate-1/24 and completion_time>=sysdate-60 order by sequence#;
spool off
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值