最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ORACLE GOLDENGATE監(jiān)控腳本方式

 更新時間:2026年05月11日 09:35:08   作者:hardy成長之旅  
本文介紹了基于OGG的數據庫容災環(huán)境的監(jiān)控腳本的開發(fā)背景、環(huán)境信息、監(jiān)控腳本編寫、定時任務配置、監(jiān)控服務器配置、運行結果及小結,監(jiān)控腳本采用模塊化設計,便于后期維護和調試

ORACLE GOLDENGATE MONITOR

1、背景

很多需要使用Oracle Godengate來進行容災,雖然Oracle官方有自己的OGG監(jiān)控產品和數據對比產品,如GoldenGate Veridata、GoldenGate Director,但是由于其是需要單獨收費的,且安裝操作使用復雜,于是開發(fā)了適應客戶需求的監(jiān)控腳本。

2、環(huán)境信息

Oracle Goldengate 環(huán)境:

  • 源端   DB01_SOURCE 192.168.1.50
  • 目標端 DB01_TARGET 192.168.1.51
  • OGG版本: ogg11g
  • 數據庫版本:Oracle 11.2.0.4

監(jiān)控服務器

  • DB0Monitor 192.168.1.16
  • 數據庫版本:Oracle 11.2.0.4
  • 存放監(jiān)控信息表:ggate.gg_check_his

3、監(jiān)控腳本編寫配置

3.1 GoldenGate日常監(jiān)控的總調度腳本

#!/usr/bin/ksh

########

##說明

## 本腳本由crontab自動調度,為GoldenGate日常監(jiān)控的總調度腳本

## 本腳本作用在于設計各種環(huán)境變量、調度采集信息的巡檢腳本、將巡檢腳本結果錄入歷史表

########

########

##獲取本腳本執(zhí)行的時間

##此時間用于判定所執(zhí)行的子腳本以及定義臨時文件名

########

export EXE_DATE_D=`date +%Y%m%d`

export EXE_DATE_H=`date +%H`

export EXE_DATE_M=`date +%M`

########

##監(jiān)控對象標識

##現(xiàn)有的監(jiān)控對象有DB01_SOURCE、DB01_TARGET

########

##DB01_SOURCE DB01_TARGET

export V_iden_str="DB01_SOURCE"

########

##本監(jiān)控腳本根目錄

########

export MON_HOME=/ggs/ogg11/gg_mon

########

##GoldenGate安裝目錄

########

export GGS_HOME=/ggs/ogg11

########

##JAVA_AGENT路徑

########

export V_JAGENT_PATH="/gg/veragent/agent/JavaAgent.jar"

########

##待檢查的文件系統(tǒng)路徑

########

export V_DF_PATH="/oracle/arch"

########

##數據庫登陸信息

## TNS_ADMIN TNS_NAME R_USERNAME R_PASSWORD 指向存儲巡檢歷史信息的數據庫

## ORACLE_SID L_USERNAME L_PASSWORD 執(zhí)向本地數據庫

## 本地同步用戶列表USERLIST

## 指向生產庫的DBLINK DBL

########

export ORACLE_BASE=/oracle/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGS_HOME:/lib:/usr/lib

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export TNS_ADMIN=$MON_HOME

export TNS_NAME="ggmon"

export R_USERNAME="ggate"

export R_PASSWORD="ggate"

export ORACLE_SID=db01

export L_USERNAME="ggate"

export L_PASSWORD="ggate"

##export DBL=""

##export USERLIST=""

########

##存放長事務參數

########

#抽取進程名字

export V_EXTRACT_NAME="EITPUB01"

#時間

export V_DURATION="55m"

########

##存放采集信息的表

########

export V_HIS_TABLE="ggate.gg_check_his"

########

##臨時文件

## DATA_FILE存儲采集回來的結果存放成txt格式

## SQL_FILE存放通過將DATA_FILE轉換成的sql語句

########

export DATA_FILE=$MON_HOME"/coll_data_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

export SQL_FILE=$MON_HOME"/insert_data_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".sql"

cat /dev/null>$DATA_FILE

cat /dev/null>$SQL_FILE

########

##定義各個列值

########

export V_coll_type="NOT DEFINE"

export V_coll_name="NOT DEFINE"

export V_coll_value="NOT COLLECT"

export V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##采集MGR進程信息腳本

########

sh $MON_HOME/check_mgr.sh > $MON_HOME/check_mgr.sh.out 2>&1

########

##采集ER進程信息腳本

## ER即EXTRACT和REPLICATE進程

## 采集信息包括ER進程運行狀態(tài)以及時間延遲

########

sh $MON_HOME/check_er.sh > $MON_HOME/check_er.sh.out 2>&1

########

##采集JavaAgent進程數腳本

## 采集的是巡檢的數據庫對應JavaAgent進程數

########

sh $MON_HOME/check_jagent.sh > $MON_HOME/check_jagent.sh.out 2>&1

########

##采集DISCARD文件ORA-報錯腳本

##注意check_discard.sh腳本 discard文件存放的路徑不一樣需要根據實際環(huán)境修改

## 采集的是巡檢的數據庫對應JavaAgent進程數

########

sh $MON_HOME/check_discard.sh > $MON_HOME/check_discard.sh.out 2>&1

########

##采集文件系統(tǒng)目錄使用率

## 采集的是文件系統(tǒng)使用率

########

sh $MON_HOME/check_df.sh > $MON_HOME/check_df.sh.out 2>&1

########

##采集表空間使用率

## 采集的是數據庫表空間使用率

########

sh $MON_HOME/check_tbs.sh > $MON_HOME/check_tbs.sh.out 2>&1

########

##采集長事務

########

sh $MON_HOME/get_trans.sh > $MON_HOME/get_trans.sh.out 2>&1

##將采集的結果格式轉換為SQL語句

########

echo "alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';">>$SQL_FILE

echo "select sysdate from dual;">>$SQL_FILE

cat $DATA_FILE|awk -v table="$V_HIS_TABLE" '{print "insert into "table" values('\''"$1"'\'','\''"$2"'\'','\''"$3"'\'','\''"$4"'\'','\''"$5"'\'');"}'>>$SQL_FILE

echo "commit;">>$SQL_FILE

echo "exit;">>$SQL_FILE

########

##將采集的結果錄入數據庫

########

${ORACLE_HOME}/bin/sqlplus -S ${R_USERNAME}/${R_PASSWORD}@${TNS_NAME} @${SQL_FILE}

########

##清理臨時文件

########

rm $DATA_FILE

rm $SQL_FILE

3.2 采集MGR進程信息

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用在于通過GoldenGate命令確認MGR進程運行狀態(tài)

########

########

##定義GoldenGate檢查命令

########

cd $GGS_HOME

echo "info mgr">INFO_MGR

########

########

##設置各個值

########

V_coll_type="MGR"

V_coll_name="MGR"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##采集MGR進程狀態(tài)

########

cd $GGS_HOME

V_coll_value=`./ggsci<INFO_MGR|grep "Manager is"|awk '{print $3}'|tr "[a-z]" "[A-Z]"`

########

##輸出采集結果到DATA_FILE文件

########

echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date>>$DATA_FILE

3.3 采集ER進程信息

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用在于通過GoldenGate命令確認ER進程運行狀態(tài)以及時間延遲信息

## ER進程即EXTRACT和REPLICATE進程

########

########

##GoldenGate檢查命令

########

cd $GGS_HOME

echo "info all">INFO_ALL

########

##臨時文件

## INFOER_FILE存放通過INFO ALL命令所獲取

########

export INFOER_FILE=$MON_HOME"/info_er_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

cat /dev/null>$INFOER_FILE

########

##設置各個值

########

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##通過info all命令獲取進程狀態(tài)

########

cd $GGS_HOME

./ggsci<INFO_ALL|grep -E "EXTRACT|REPLICAT">$INFOER_FILE

########

####輸出采集結果到DATA_FILE文件

#### 腳本上半部分處理ER進程狀態(tài)、下半部分處理ER進程LAG信息

########

while read LINE

do

 ##ER STATUS

 V_coll_type="ER"

 V_coll_name=`echo $LINE|awk '{print $3}'`

 V_coll_value=`echo $LINE|awk '{print $2}'`

 echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date>>$DATA_FILE

 ##ER LAG

 V_coll_type="LAG"

 V_coll_name=`echo $LINE|awk '{print $3}'`

 V_coll_value=`echo $LINE|awk '{{split ($4,A,":")}{split ($5,B,":")}{print "(("A[1]"+"B[1]")*60+"A[2]"+"B[2]")*60+"A[3]"+"B[3]}}'|bc`

 echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date>>$DATA_FILE

done<$INFOER_FILE

########

##清理臨時文件

########

rm $INFOER_FILE

3.4 采集JavaAgent進程信息

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用在于通過GoldenGate命令確認GoldenGate Veridata Java Agent進程數

########

########

##設置各個值

########

V_coll_type="JAGENT"

V_coll_name="PROCESS_NUM"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##采集JAVA AGENT進程狀態(tài)

########

cd $GGS_HOME

V_coll_value=`ps -ef|grep $V_JAGENT_PATH|grep -v grep|wc -l`

########

##輸出采集結果到DATA_FILE文件

########

echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date>>$DATA_FILE

3.5 采集DISCARD文件ORA-信息

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用在于通過檢查GoldenGate Discard日志,統(tǒng)計ORA-報錯個數

########

########

##GoldenGate檢查命令

########

cd $GGS_HOME

echo "info all">INFO_ALL

########

##臨時文件

## ERNAME_FILE存放當前數據庫中GoldenGate同步進程命名

########

export ERNAME_FILE=$MON_HOME"/er_name_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

cat /dev/null>$ERNAME_FILE

########

##設置各個值

########

V_coll_type="DISCARD"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##通過info all命令獲取進程名

########

cd $GGS_HOME

./ggsci<INFO_ALL|grep -E "EXTRACT|REPLICAT"|awk '{print $3}'>$ERNAME_FILE

########

##逐一分析各個進程的discard文件,并輸出采集結果到DATA_FILE文件

########

cd $GGS_HOME/dirrpt

for V_coll_name in `cat $ERNAME_FILE`

do

 #V_coll_value=`cat $(echo ${V_coll_name}.DSC | tr '[A-Z]' '[a-z]')|grep ORA-|wc -l`

 #自己實驗使用下面這條

 V_coll_value=`cat $(echo ${V_coll_name}/${V_coll_name}.DSC | tr '[A-Z]' '[a-z]')|grep ORA-|wc -l`

 echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date >>$DATA_FILE

done

########

##清理臨時文件

########

rm $ERNAME_FILE

3.6 采集文件系統(tǒng)目錄使用率

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用主要負責GoldenGate文件系統(tǒng)

########

##設置各個值

########

V_coll_type="DF"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##臨時文件

## DF_FILE存放當前數據庫中GoldenGate同步進程命名

########

export DF_FILE=$MON_HOME"/df_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

cat /dev/null>$DF_FILE

########

##通過df命令獲取文件系統(tǒng)使用率

##sed -n '2,$p' 打印第2行到最后一行

########

df -k $V_DF_PATH |sed -n '2,$p'> $DF_FILE

 while read i

do

 V_coll_name=`echo $i|awk '{print $6}'`

 V_coll_value=`echo $i|awk '{print $5}'`

 echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date >> $DATA_FILE

done < $DF_FILE

#####刪除臨時文件

rm -rf $DF_FILE

3.7 采集表空間使用率

#!/usr/bin/ksh

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用主要監(jiān)控表空間使用率

########

##設置各個值

########

V_coll_type="TABLESPACE"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##臨時文件

## TBS_FILE存放當前數據庫中GoldenGate同步進程命名

########

export TBS_FILE=$MON_HOME"/tbs_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

export TBS_FILE2=$MON_HOME"/tbs2_"$EXE_DATE_D$EXE_DATE_H$EXE_DATE_M".txt"

cat /dev/null>$TBS_FILE

########

##通過SQL命令獲取表空間使用率

########

${ORACLE_HOME}/bin/sqlplus -s -l / as sysdba << EOF  > $TBS_FILE

set lin 200 pagesize 1000

set heading off

col use_precent for 999.99

select 'TBS_TO_GREP' grep,b.tablespace_name,round(sum(b.bytes)/1024/1024,0) sum_MB, round(sum(nvl(a.bytes,0))/1024/1024,0) free_MB,

 to_char(round((sum(b.bytes)-sum(nvl(a.bytes,0)))/sum(b.bytes),4)*100,'990.00') use_precent

from (select tablespace_name,file_id,sum(bytes) bytes from dba_free_space group by tablespace_name,file_id ) a,

 dba_data_files b

where a.file_id(+)=b.file_id and a.tablespace_name(+)=b.tablespace_name

group by b.tablespace_name

order by 4;

EOF

cat $TBS_FILE|grep TBS_TO_GREP>$TBS_FILE2

########

##將結果錄入DATAFILE

########

 while read i

do

 V_coll_name=`echo $i|awk '{print $2}'`

 V_coll_value=`echo $i|awk '{print $5}'`

 echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date >> $DATA_FILE

done < $TBS_FILE2

#####刪除臨時文件

rm -rf $TBS_FILE

rm -rf $TBS_FILE2

3.8 采集長事務信息

########

##說明

## 本腳本由collect_gg_info.sh腳本調度,屬于GoldenGate日常監(jiān)控腳本

## 本腳本作用在于通過GoldenGate命令檢查長事務進程個數

########

########

##定義GoldenGate檢查命令

########

cd $GGS_HOME

echo "send "$V_EXTRACT_NAME",SHOWTRANS DURATION "$V_DURATION>SHOW_TRANS

########

########

##設置各個值

########

V_coll_type="LONGTRANS"

V_coll_name="PROCESS_NUM"

V_coll_date=`date +%Y'-'%m'-'%d':'%H':'%M':'%S`

########

##獲取長事務數量

########

cd $GGS_HOME

V_coll_value=`./ggsci<SHOW_TRANS|grep "XID:"|wc -l`

########

##輸出采集結果到DATA_FILE文件

########

echo $V_iden_str" "$V_coll_type" "$V_coll_name" "$V_coll_value" "$V_coll_date>>$DATA_FILE

4、OGG源端目標端配置采集腳本定時任務

配置定時任務

####GoldenGate日常運行狀態(tài)采集腳本

0,5,10,15,20,25,30,35,40,45,50,55 * * * * sh /ggs/ogg11/gg_mon/collect_gg_info.sh 1>/ggs/ogg11/gg_mon/collect_gg_info.sh.out 2>&1

5、監(jiān)控服務器準備存儲采集信息的表

CREATE TABLESPACE "GGATE"

LOGGING

DATAFILE '/u01/oradata/db01/ggate01.dbf' SIZE 50M

AUTOEXTEND OFF;

CREATE TABLE GGATE.gg_check_his(

 IDEN_STR VARCHAR2(20),

 COLL_TYPE VARCHAR2(20),

 COLL_NAME VARCHAR2(20),

 COLL_VALUE VARCHAR2(50),

 COLL_DATE DATE

) TABLESPACE GGATE;

6、監(jiān)控服務器配置告警腳本

#!/usr/bin/ksh

#####Shell for Display the alert and ok informations

#####add by 2020/02/15

#####Define Enviroment

EXE_DATE_H=`date +%H`

EXE_DATE_M=`date +%M`

##文件系統(tǒng)使用率85% 表空間使用率95% 時間延遲15%

DF_LIM=85

TBS_LIM=95

LAG_LIM=15

##定義是否報告正常信息

IF_REPORT_DIS="NO"

IF_REPORT_LONG="NO"

IF_REPORT_JAGENT="NO"

IF_REPORT_STRUCT="NO"

if [ $EXE_DATE_H == 08 -o $EXE_DATE_H == 17 ]

 then

 IF_REPORT_DIS="YES"

 IF_REPORT_JAGENT="YES"

 IF_REPORT_STRUCT="YES"

fi

if [ $EXE_DATE_M -ge 0 -a $EXE_DATE_M -lt 5 ]

 then

 IF_REPORT_LONG="YES"

fi

echo "###############################Excute Start Time: `date` ##############################">> send_mail_msg

#. $HOME/.profile

export ORACLE_SID=db01

MONITOR_HOME=/home/oracle/testmon

#####Define Identifier

DB01_SOURCE="(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)"

DB01_TARGET="(災備中心|DB_NAME: db01|IP: 192.168.1.51 |GG_HOME: /ggs/ogg11/gg_mon)"

iden="DB01_SOURCE DB01_TARGET"

#####創(chuàng)建臨時表,相關臨時表存儲最近一次采集的信息

sqlplus -s -l / as sysdba <<EOF >create_tmp_table.tmp

drop table ggate.gg_check_his_temp;

create table ggate.gg_check_his_temp as

select * from ggate.gg_check_his

where COLL_DATE between sysdate-1/24/60*5 and sysdate;

EOF

#####辨別主機采集是否正常,若異常則輸出

sqlplus -s -l / as sysdba <<EOF > host_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR from ggate.gg_check_his_temp group by IDEN_STR having count(distinct COLL_TYPE)>7;

EOF

cd $MONITOR_HOME

cat /dev/null>host_info

cat /dev/null>host_all

if [ `cat host_info_sql.tmp|wc -l` -eq 2 ]

then

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各采集進程運行正常。" >>ggmon.log

else

 cat /dev/null>host.tmp

 for i in $iden

 do

 echo $i>>host.tmp

 done

 cat host.tmp|sort -u>host_all

 rm host.tmp

 cat host_info_sql.tmp |sort -u > host_info

 diff host_all host_info|grep '^<'|awk '{print $NF}' > no_collect_info.tmp

 while read i

do

 case $i in

 DB01_SOURCE) echo "WARNING "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" GoldenGate日常運行狀態(tài)采集腳本存在異常。${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "WARNING "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" GoldenGate日常運行狀態(tài)采集腳本存在異常。${DB01_TARGET}" >> ggmon.log

 ;;

 *) exit

 ;;

 esac

 done < no_collect_info.tmp

 fi

#######下面是根據標識符從數據庫獲取信息

#######Mode1#######各主機獲取GoldenGate進程信息

sqlplus -s -l / as sysdba << EOF >pro_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME,COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp where COLL_TYPE in ('MGR','ER') order by 1,2,3,4;

EOF

#####過濾進程信息

cd $MONITOR_HOME

cat /dev/null>pro_ok.tmp

cat /dev/null>pro_warning.tmp

cat /dev/null>mail_msg_pro_warning.tmp

while 

 read i

 do

 if [ "`echo $i|awk '{print $4}'`"x == "RUNNING"x ]

 then

 echo $i >> pro_ok.tmp

 else

 echo $i >> pro_warning.tmp

 fi

 done < pro_info_sql.tmp

#####1#####過濾生成進程運行信息

###GoldenGate 進程正常,輸出信息

 if [ -s $MONITOR_HOME/pro_warning.tmp ]

 then

 cat pro_warning.tmp > mail_msg_pro_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "ERROR "$5" "$6" GoldenGate進程狀態(tài)異常,名字:"$3",狀態(tài):"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_pro_warning.tmp

 else

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各GoldenGate進程狀態(tài)正常。" >>ggmon.log

 fi

######Mode2######

###監(jiān)控Discard文件是否有ORA-報錯

##################

#獲取Discard文件信息

sqlplus -s -l / as sysdba << EOF >ora_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME,COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

where COLL_TYPE='DISCARD' order by 1,2,3,4;

EOF

#過濾ORA信息

cd $MONITOR_HOME

cat /dev/null>ora_ok.tmp

cat /dev/null>ora_warning.tmp

while 

 read i

 do

 if [ `echo $i|awk '{print $4}'` -eq 0 ]

 then

 echo $i >> ora_ok.tmp

 else

 echo $i >> ora_warning.tmp

 fi

 done < ora_info_sql.tmp

#生成郵件信息

if [ -s $MONITOR_HOME/ora_warning.tmp ]

 then

 cat ora_warning.tmp > mail_msg_ora_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" GoldenGate進程discard文件報錯,名字:"$3",數量:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_ora_warning.tmp

 else

 if [ $IF_REPORT_DIS == "YES" ]

 then

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各GoldenGate進程discard文件正常。" >>ggmon.log

 fi

fi

######Mode3######

###監(jiān)控進程延遲

##################

#獲取延遲信息

sqlplus -s -l / as sysdba << EOF >lag_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

select IDEN_STR,COLL_TYPE,COLL_NAME,round(COLL_VALUE/60,0) ,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

where COLL_TYPE ='LAG' order by 1,2,3,4;

EOF

#過濾延遲信息

cd $MONITOR_HOME

cat /dev/null>lag_ok.tmp

cat /dev/null>lag_warning.tmp

cat /dev/null>mail_msg_lag_warning.tmp

while 

 read i

 do

 if [ `echo $i|awk '{print $4}'` -lt $LAG_LIM ]

 then

 echo $i >> lag_ok.tmp

 else

 echo $i >> lag_warning.tmp

 fi

 done < lag_info_sql.tmp

#生成郵件信息

 if [ -s $MONITOR_HOME/lag_warning.tmp ]

 then

 cat lag_warning.tmp > mail_msg_lag_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" GoldenGate進程存在時間延遲,名字:"$3",分鐘:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_lag_warning.tmp

 else

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各GoldenGate進程時間延遲均在"$LAG_LIM"分鐘內。" >>ggmon.log         

 fi

######Mode4######

###監(jiān)控長事務

##################

#獲取各長事務信息

sqlplus -s -l / as sysdba << EOF >long_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME, COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

 where COLL_TYPE ='LONGTRANS' order by 1,2,3,4;

EOF

#過濾文系統(tǒng)信息

cd $MONITOR_HOME

cat /dev/null>long_ok.tmp

cat /dev/null>long_warning.tmp

cat /dev/null>mail_msg_long_warning.tmp

while 

 read i

 do

 if [ ` echo $i|awk '{print $4}'` -eq 0 ]

 then

 echo $i >> long_ok.tmp

 else

 echo $i >> long_warning.tmp

 fi

 done < long_info_sql.tmp

#生成郵件信息

 if [ -s $MONITOR_HOME/long_warning.tmp ]

 then

 cat long_warning.tmp > mail_msg_long_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" GoldenGate進程監(jiān)測到長事務,名字:"$3",數量:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_long_warning.tmp

 else

 if [ $IF_REPORT_LONG == "YES" ]

 then

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心上各GoldenGate進程對應數據庫均無長事務。" >>ggmon.log

 fi

 fi

######Mode5######

###監(jiān)控數據庫表空間

##################

#獲取各表空間使用率信息

sqlplus -s -l / as sysdba << EOF >tb_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

select IDEN_STR,COLL_TYPE,COLL_NAME, round(COLL_VALUE,0),to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

where COLL_TYPE ='TABLESPACE' order by 1,2,3,4;

EOF

#過濾各表空間使用率信息

cd $MONITOR_HOME

cat /dev/null>tb_ok.tmp

cat /dev/null>tb_warning.tmp

cat /dev/null>mail_msg_tb_warning.tmp

while 

 read i

 do

 if [ `echo $i|awk '{print $4}'` -le $TBS_LIM ]

 then

 echo $i >> tb_ok.tmp

 else

 echo $i >> tb_warning.tmp

 fi

 done < tb_info_sql.tmp

#生成郵件信息

 if [ -s $MONITOR_HOME/tb_warning.tmp ]

 then

 cat tb_warning.tmp > mail_msg_tb_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" 數據庫表空間使用率過高,名字:"$3",使用率:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

  DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_tb_warning.tmp

 else

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各數據庫表空間使用率正常。" >>ggmon.log

 fi

######Mode6######

###監(jiān)控文件系統(tǒng)

##################

#獲取各文件系統(tǒng)使用率信息

sqlplus -s -l / as sysdba << EOF >df_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME, COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

where COLL_TYPE='DF' order by 1,2,3,4;

EOF

#過濾文件使用率信息

cd $MONITOR_HOME

cat /dev/null>df_ok.tmp

cat /dev/null>df_warning.tmp

cat /dev/null>mail_msg_df_warning.tmp

while 

 read i

 do

 if [ `echo $i|awk '{print $4}'|awk -F % '{print $1}'` -le $DF_LIM ]

 then

 echo $i >> df_ok.tmp

 else

 echo $i >> df_warning.tmp

 fi

 done < df_info_sql.tmp

#生成郵件信息

 if [ -s $MONITOR_HOME/df_warning.tmp ]

 then

 cat df_warning.tmp > mail_msg_df_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" 文件系統(tǒng)使用率過高,名字:"$3",使用率:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_df_warning.tmp

 else

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上各文件系統(tǒng)使用率正常。" >>ggmon.log

 fi

#####Mode7######

###監(jiān)控Veridata Java進程

#################

#獲取JAGENT文件信息

sqlplus -s -l / as sysdba << EOF >java_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME,COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp 

where COLL_TYPE ='JAGENT' order by 1,2,3,4;

EOF

#過濾JAGENT信息

cd $MONITOR_HOME

cat /dev/null>java_ok.tmp

cat /dev/null>java_warning.tmp

cat /dev/null>mail_msg_java_warning.tmp

while 

 read i

 do

 if [ `echo $i|awk '{print $4}'` -eq 1 ]

 then

 echo $i >> java_ok.tmp

 else

 echo $i >> java_warning.tmp

 fi

 done < java_info_sql.tmp

#生成郵件信息

if [ -s $MONITOR_HOME/java_warning.tmp ]

 then

 cat java_warning.tmp > mail_msg_java_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "ERROR "$5" "$6" GoldenGate Veridata Java Agent沒有啟動。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_java_warning.tmp

 else

 if [ $IF_REPORT_JAGENT == "YES" ]

 then

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上GoldenGate Veridata Java Agent正常。" >>ggmon.log

 fi

 fi

#########Mode 8 ############

####監(jiān)控災備與主庫對比情況

#############################

sqlplus -s -l / as sysdba << EOF >object_info_sql.tmp

 set serveroutput off

 set pagesize 2000

 set linesize 1000

 set feedback off

 set heading off

 set newpage none

 set term off

 set trims on

 set trim on

 col COLL_TYPE for a10

 col COLL_VALUE for a20

select IDEN_STR,COLL_TYPE,COLL_NAME, COLL_VALUE,to_char(COLL_DATE,'yyyy-mm-dd hh24:mi:ss') from ggate.gg_check_his_temp

 where COLL_TYPE='OBJECT' order by 1,2,3,4;

EOF

#過濾文系統(tǒng)信息

cd $MONITOR_HOME

cat /dev/null>object_ok.tmp

cat /dev/null>object_warning.tmp

cat /dev/null>mail_msg_object_warning.tmp

while 

  read i

 do

 if [ `echo $i|awk '{print $4}'` -eq 0 ]

 then

 echo $i >> object_ok.tmp

 else

 echo $i >> object_warning.tmp

 fi

 done < object_info_sql.tmp

#生成郵件信息

 if [ -s $MONITOR_HOME/object_warning.tmp ]

 then

 cat object_warning.tmp > mail_msg_object_warning.tmp

while read line

do

 veritify_col=`echo $line |awk '{print "WARNING "$5" "$6" 數據庫結構不一致,類型:"$3",數量:"$4"。"}'`

 veritify=`echo $line |awk '{print $1}'`

 case $veritify in

 DB01_SOURCE) echo "${veritify_col}${DB01_SOURCE}" >> ggmon.log

 ;;

 DB01_TARGET) echo "${veritify_col}${DB01_TARGET}" >> ggmon.log

 ;;

 *)

 ;;

 esac

 done < mail_msg_object_warning.tmp

 else

 if [ $IF_REPORT_STRUCT == "YES" ]

 then

 echo "INFO "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`" 生產中心以及災備中心上結構對比正常。" >>ggmon.log

 fi

 fi

#########Mode End###########

####生成正式郵件文本

#############################

cat *ok > send_mail_msg.tmp.ok

cat ggmon.log >> send_mail_msg.tmp

#如果 FILE 存在且大小不為0

if [ -s $MONITOR_HOME/send_mail_msg.tmp ]

then

 cat send_mail_msg.tmp >> send_mail_msg

 else

 cat send_mail_msg.tmp.ok >> send_mail_msg

 fi

###清理臨時文件

cd $MONITOR_HOME

 rm -rf *tmp

 rm -rf *ok

 rm -rf mail*

 echo "###############################Excute End Time: `date` ##############################">> send_mail_msg

echo "                                                                                ">> send_mail_msg

7、運行結果

當有異常時候就會通過告警發(fā)送出來。

ERROR 2020-02-21 02:03:32 GoldenGate Veridata Java Agent沒有啟動。(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:03:32 GoldenGate進程discard文件報錯,名字:RITPUB10,數量:2。(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:05:01 GoldenGate進程discard文件報錯,名字:RITPUB10,數量:2。(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:03:32 GoldenGate進程存在時間延遲,名字:PITPUB01,分鐘:16334。(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:03:32 數據庫表空間使用率過高,名字:SYSTEM,使用率:97。(生產中心|DB_NAME: db01|IP: 192.168.1.50 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:01:42 數據庫表空間使用率過高,名字:SYSTEM,使用率:100。(災備中心|DB_NAME: db01|IP: 192.168.1.51 |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:05:01 數據庫表空間使用率過高,名字:SYSTEM,使用率:100。(災備中心|DB_NAME: db01|IP: 192.168.1.51  |GG_HOME: /ggs/ogg11/gg_mon)

WARNING 2020-02-21 02:03:29 數據庫表空間使用率過高,名字:SYSTEM,使用率:100。(災備中心|DB_NAME: db01|IP: 192.168.1.51 |GG_HOME: /ggs/ogg11/gg_mon)

INFO 2020-02-21 03:26:01 生產中心以及災備中心上各GoldenGate進程狀態(tài)正常。

INFO 2020-02-21 03:26:01 生產中心以及災備中心上各GoldenGate進程時間延遲均在15分鐘內。

INFO 2020-02-21 03:26:01 生產中心以及災備中心上各數據庫表空間使用率正常。

INFO 2020-02-21 03:26:01 生產中心以及災備中心上各文件系統(tǒng)使用率正常。

8、總結

監(jiān)控腳本項目架構采用模塊化,思路清晰明了,每個監(jiān)控指標都是單獨一個腳本,便于修改,移植,調試。

前期部署調試好后,后期人工介入的時間很少,定時檢查同步狀態(tài)和日志狀態(tài),后期可以加入自動發(fā)送短信和郵件的功能,極大方便我們的日常維護。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

德兴市| 华容县| 东源县| 蓬莱市| 高尔夫| 都昌县| 大关县| 浮山县| 颍上县| 石渠县| 乐都县| 高邑县| 黑水县| 化州市| 徐水县| 广昌县| 依兰县| 阜阳市| 翁牛特旗| 连州市| 江口县| 江门市| 名山县| 来凤县| 福安市| 江西省| 延吉市| 德兴市| 永吉县| 普格县| 新民市| 尼勒克县| 桑日县| 微山县| 襄垣县| 当雄县| 突泉县| 新泰市| 资阳市| 谢通门县| 牡丹江市|