Oracle DG:检测归档是否传输到备库
转载请注明文章转载自:Dbabc.Net [http://dbabc.net]
本文链接:http://dbabc.net/archives/2011/12/20/oracle-dg-check-arc-is-not-trans.shtml
Oracle DG搭建好之后,每天的巡检都要查看归档是否传输到备库并应用,以下几步可以实现自动化检查归档是否传输到备库,
基本思路:
通过表来记录没有传输到备库的归档的信息,创建sp,记录未传输到备库的归档信息,通过crontab设定每天定时坚检查此表是否含有记录,若有记录就发mail预警。
通过以下sql检查归档是否传输到备库:
SELECT '10.2.8.8' IP,
LOCAL.THREAD#,
LOCAL.SEQUENCE#,
LOCAL.COMPLETION_TIME,
SYSDATE
FROM (SELECT THREAD#, SEQUENCE#, COMPLETION_TIME
FROM V$ARCHIVED_LOG@dbabc1
WHERE DEST_ID = 1 AND FIRST_TIME > SYSDATE - 1) LOCAL
WHERE LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE#
FROM V$ARCHIVED_LOG@dbabc1
WHERE DEST_ID = 2
AND THREAD# = LOCAL.THREAD#
AND FIRST_TIME > SYSDATE - 1)
1、创建table用来记录未传输的归档信息
CREATE TABLE ARC_NOT_TRANS ( HOSTNAME VARCHAR2(20 BYTE), THREAD# NUMBER, SEQUENCE# NUMBER, COMPLETION_TIME DATE, ADD_TIME DATE DEFAULT sysdate )
2、创建sp,将未传输的归档信息记录到表格中,这里是通过dblinkd实现的。
CREATE OR REPLACE PROCEDURE dbabc.SP_ARC_NOT_TRANS
AS
/***************************************
Author: dbabc.net
Time:2011-12-07
功能:记录没有传输到备库的standby信息
**************************************/
BEGIN
---
INSERT INTO dbabc.ARC_NOT_TRANS
SELECT '10.2.8.8' IP,
LOCAL.THREAD#,
LOCAL.SEQUENCE#,
LOCAL.COMPLETION_TIME,
SYSDATE
FROM (SELECT THREAD#, SEQUENCE#, COMPLETION_TIME
FROM V$ARCHIVED_LOG@dbabc1
WHERE DEST_ID = 1 AND FIRST_TIME > SYSDATE - 1) LOCAL
WHERE LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE#
FROM V$ARCHIVED_LOG@dbabc1
WHERE DEST_ID = 2
AND THREAD# = LOCAL.THREAD#
AND FIRST_TIME > SYSDATE - 1);
COMMIT;
INSERT INTO dbabc.ARC_NOT_TRANS
SELECT '10.8.9.8' IP,
LOCAL.THREAD#,
LOCAL.SEQUENCE#,
LOCAL.COMPLETION_TIME,
SYSDATE
FROM (SELECT THREAD#, SEQUENCE#, COMPLETION_TIME
FROM V$ARCHIVED_LOG@dbabc2
WHERE DEST_ID = 1 AND FIRST_TIME > SYSDATE - 1) LOCAL
WHERE LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE#
FROM V$ARCHIVED_LOG@dbabc2
WHERE DEST_ID = 2
AND THREAD# = LOCAL.THREAD#
AND FIRST_TIME > SYSDATE - 1);
COMMIT;
END;
/
3、创建job,每天定时执行上面的sp
4、通过crontab每天定时检查table中是否有记录
#!/bin/bash
#Check archive logs if have trances to standby SCRIPTS arc_not_tracs.sh
#by dbabc.net 2011/12/07
#User specific environment and startup programs
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
DBAEMAIL=dba@dbabc.net;export DBAEMAIL
VALUE=`$ORACLE_HOME/bin/sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn oram/oram
SELECT count(*) FROM ARC_NOT_TRANS;
exit
EOF`
if [ "$VALUE" -gt 0 ]; then
$ORACLE_HOME/bin/sqlplus -S /nolog > arc_not_trans.log <<EOF
set heading off feedback off pagesize 0 verify off echo off
set lines 200
conn oram/oram
alter session set nls_date_format='YYYY-MM-DDHH24:MI:SS';
SELECT * FROM ARC_NOT_TRANS;
insert into ARC_NOT_TRANS_MV select * from ARC_NOT_TRANS;
commit;
TRUNCATE TABLE ARC_NOT_TRANS DROP STORAGE;
exit
EOF
/usr/local/bin/sendEmail -f dbabc@dbabc.net -t ${DBAEMAIL} -s smtp.dbabc.net -u "archive log not trans" -o message-file=arc_not_trans.log -xu "dbabc@dbabc.net" -xp "pwddbabc"
exit
else
echo `date +'%F %T'`" All the archive log have trans" >arc_transok.txt
/usr/local/bin/sendEmail -f dbabc@dbabc.net -t ${DBAEMAIL} -s smtp.dbabc.net -u "arc_transok" -o message-file=arc_transok.txt -xu "dbabc@dbabc.net" -xp "pwddbabc"
fi
exit
Copyright © Dbabc.Net All Rights Reserved.
本站内容仅代表个人观点, 与其他任何组织或公司无关
-The End-
上一篇: Linux shell 重定向