SHELL指令碼檢查Oracle DG備庫是否已經應用歸檔
自動檢查Oracle DG備庫是否已經應用歸檔的shell指令碼:
PS:本指令碼需要先建立table:ARC_NOT_REPLY_LOG,這個表是用來存放記錄的,如果不需要存放記錄的話,可以將shell指令碼的insert刪掉。
ARC_NOT_REPLY_LOG 建立指令碼:
CREATE TABLE ORAM.ARC_NOT_REPLY_LOG ( HOSTNAME VARCHAR2(50 BYTE), NAME VARCHAR2(100 BYTE), SEQUENCE NUMBER, APPLIED VARCHAR2(3 BYTE), COMPLETION_TIME VARCHAR2(50 BYTE), ADD_TIME DATE DEFAULT SYSDATE )
shell指令碼內容:
#!/bin/bash #by Dbabc.net 2012/02/02 #User specific environment and startup programs # if [ -f ~/.bash_profile ]; then . ~/.bash_profile fi export DBAEMAIL=dbabc@dbabc.net export ORACLE_SID=dbabc export IP='10.8.8.1' export SMTP='smtp.dbabc.net' export FRUSER='dba@dbabc.net' export BCCUSER='dba@dbabc.net' export USERPWD='pwd' VALUE=`$ORACLE_HOME/bin/sqlplus -S /nolog <<EOF set heading off feedback off pagesize 0 verify off echo off numwidth 4 connect / as sysdba select count(*) from v\\$archived_log where applied='NO'; exit EOF` if [ "$VALUE" -gt 0 ]; then $ORACLE_HOME/bin/sqlplus -S /nolog > arc_not_reply.log <<EOF set heading off feedback off pagesize 0 verify off echo off set lines 200 col name format a60 connect / as sysdba alter session set nls_date_format='YYYY-MM-DDHH24:MI:SS'; select '$IP',name,sequence#,applied,completion_time from v\$archived_log where applied='NO'; exit EOF cat arc_not_reply.log|rev|awk {'print $1" "$2" "$3" "$4" "$5'} | rev |awk {'print "insert into ARC_NOT_REPLY_LOG(hostname,name,SEQUENCE,applied,COMPLETION_TIME) values(#"$1"#,#"$2"#,"$3",#"$4"#,#"$5"#);"'} |grep -v '##' | grep -v '#on#' | sed "s/#/'/g" |sed "s/%//g"| sed "s/ip/"${v_hostip}"/g" >ARC_NOT_REPLY_LOG.sql; #echo "insert into ARC_NOT_REPLY_LOG(hostname,name,SEQUENCE#,applied,COMPLETION_TIME) values ( '${INTV1}', '${INTV2},'${INTV3}', '${INTV4}', '${INTV5}');" >ARC_NOT_REPLY_LOG.sql; $ORACLE_HOME/bin/sqlplus /nolog <<EOF connect oram/oram@10.8.8.4:1521/yqpt @ARC_NOT_REPLY_LOG.sql commit; exit; EOF /usr/local/bin/sendEmail -f $FRUSER -t ${DBAEMAIL} -bcc $BCCUSER -s $SMTP -u "$IP arclog not reply" -o message-file=arc_not_reply.log -xu "$FRUSER" -xp "$USERPWD" exit else echo `date +'%F %T'`" All the archive log have replyed" >arc_replyok.txt /usr/local/bin/sendEmail -f $FRUSER -t ${DBAEMAIL} -bcc $BCCUSER -s $SMTP -u "$IP arc_replyok" -o message-file=arc_replyok.txt -xu "$FRUSER" -xp "$USERPWD" fi exit
修改其中的變數即可,<< 修改成半形格式,wordpress會自動轉換半形的<<。
然後再透過crontab定時執行此指令碼,實現Email預警。
實際上需要修改的地方有以下標紅部分:
#!/bin/bash
#by Dbabc.net 2012/02/02
#User specific environment and startup programs
#
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
export DBAEMAIL=dbabc@dbabc.net
export ORACLE_SID=dbabc
export IP='10.8.8.1'
export SMTP='smtp.dbabc.net'
export FRUSER='dba@dbabc.net'
export BCCUSER='dba@dbabc.net'
export USERPWD='pwd'
VALUE=`$ORACLE_HOME/bin/sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
connect / as sysdba
select count(*) from v\\$archived_log where applied='NO';
exit
EOF`
if [ "$VALUE" -gt 0 ]; then
$ORACLE_HOME/bin/sqlplus -S /nolog > arc_not_reply.log <<EOF
set heading off feedback off pagesize 0 verify off echo off
set lines 200
col name format a60
connect / as sysdba
alter session set nls_date_format='YYYY-MM-DDHH24:MI:SS';
select '$IP',name,sequence#,applied,completion_time from v\$archived_log where applied='NO';
exit
EOF
cat arc_not_reply.log|rev|awk {'print $1" "$2" "$3" "$4" "$5'} | rev |awk {'print "insert into ARC_NOT_REPLY_LOG(hostname,name,SEQUENCE,applied,COMPLETION_TIME) values(#"$1"#,#"$2"#,"$3",#"$4"#,#"$5"#);"'} |grep -v '##' | grep -v '#on#' | sed "s/#/'/g" |sed "s/%//g"| sed "s/ip/"${v_hostip}"/g" >ARC_NOT_REPLY_LOG.sql;
#echo "insert into ARC_NOT_REPLY_LOG(hostname,name,SEQUENCE#,applied,COMPLETION_TIME) values ( '${INTV1}', '${INTV2},'${INTV3}', '${INTV4}', '${INTV5}');" >ARC_NOT_REPLY_LOG.sql;
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect oram/oram@10.8.8.4:1521/yqpt
@ARC_NOT_REPLY_LOG.sql
commit;
exit;
EOF
/usr/local/bin/sendEmail -f $FRUSER -t ${DBAEMAIL} -bcc $BCCUSER -s $SMTP -u "$IP arclog not reply" -o message-file=arc_not_reply.log -xu "$FRUSER" -xp "$USERPWD"
exit
else
echo `date +'%F %T'`" All the archive log have replyed" >arc_replyok.txt
/usr/local/bin/sendEmail -f $FRUSER -t ${DBAEMAIL} -bcc $BCCUSER -s $SMTP -u "$IP arc_replyok" -o message-file=arc_replyok.txt -xu "$FRUSER" -xp "$USERPWD"
fi
exit
並且,/usr/local/bin/sendEmail是一個命令,希望執行成功需要先安裝sendEmail
安裝步驟如下:
sendEmail下載地址:
# wget //下載1.56版本
# tar -xzvf sendEmail-v1.56.tar.gz //解壓後就可以使用了
# mv sendEmail /usr/local/bin/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28853590/viewspace-2150478/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- dg刪除備庫已經應用的歸檔日誌指令碼指令碼
- Oracle檢視歸檔是否被備庫應用Oracle
- 用zabbix監控oracle dg從庫是否應用日誌的指令碼Oracle應用日誌指令碼
- 用RMAN備份歸檔日誌時檢查歸檔日誌是否存在
- DG-備庫日誌的應用遲時檢查
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- 檢視Oracle DG是否是實時應用Oracle
- DataGuard已應用歸檔日誌刪除指令碼指令碼
- oracle 如何不備份已經備份的歸檔Oracle
- 檢視oracle資料庫是否歸檔和修改歸檔模式Oracle資料庫模式
- Oracle Standby如何檢視歸檔檔案(從主庫傳來的)是否真的應用?Oracle
- Oracle DG standby刪除歸檔的判斷指令碼Oracle指令碼
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- DG-在主庫/備庫刪除已經應用過的日誌.txt
- 檢視oracle資料庫是否歸檔和修改歸檔模式(轉)Oracle資料庫模式
- 【轉載】Oracle Data Guard 備庫 歸檔檔案 刪除指令碼Oracle指令碼
- 備庫自動刪除已應用的歸檔日誌
- 檢視oracle資料庫是否為歸檔模式Oracle資料庫模式
- 檢視DG是否是實時應用
- dg歸檔沒有傳輸到備庫
- Oracle 11g Data Guard 備庫歸檔日誌清理指令碼(保留一週歸檔)Oracle指令碼
- 不備份上次已經備份的歸檔
- 檢查RPM包是否已經安裝
- ORACLE NBU調取oracle rman指令碼備份歸檔不自動刪除歸檔Oracle指令碼
- 利用sqlplus指令碼刪除備庫歸檔SQL指令碼
- 配置RMAN清除已應用到備庫的歸檔日誌
- 通過no backed up times可以檢查歸檔是否有過備份
- oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- Shell指令碼應用(三)指令碼
- ORACLE自動備份shell指令碼Oracle指令碼
- dg中備庫歸檔目錄滿了,導致不能接收主庫歸檔檔案
- Oracle 10g DG 主庫丟失歸檔Oracle 10g
- (轉)oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- RMAN備份歸檔日誌指令碼指令碼
- 冷備份應用歸檔
- (轉)shell 指令碼date時間格式(備查)指令碼
- DG 主庫丟失歸檔
- DataGuard備庫刪除已經應用的日誌