暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

DG standby time 监控脚本部署

原创 布衣 2022-11-10
906

背景

从遇到DG 同步延迟之奇怪的经典报错:ORA-16191这个报错,从而受到启发,再通过DG standby_time 监控脚本优化逻辑,完成以下脚本的编写,希望对大家有所有帮助。

一、创建主库的tns_name

Primary_DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.30)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )

二、脚本

  • 注意:这个位置要修改成上面的tns_name
    image.png
  • 监控阀值:2处都需要调
    1、这里可调天、时、分
    image.png
    2、 这里只能调分
    image.png
#!/bin/bash
export ORACLE_SID=
export ORACLE_UNQNAME=
export ORACLE_BASE=/u01/oracle
export con_sys='sqlplus -s system/密码'
f_check_standby_time(){
standby_time=`$con_sys<< EOF
set serveroutput on;
    set pagesize 0;
    SET FEEDBACK off;
    SET HEADING off;
        declare
         VALUE_day    number(2);
          VALUE_hour   number(2);
          VALUE_mins   number(2);
          VALUE_sec    number(2);
          VALUE_result varchar(20);
          VALUE_null number(1);
        begin
          -- value 字段截取     
                 select count(1)
                   into VALUE_null
                   from v\\$dataguard_stats
                  where name = 'apply lag' and VALUE is not null;
if VALUE_null=1 then 
                select substr(VALUE, 2, 2),
                           substr(VALUE, 5, 2),
                           substr(VALUE, 8, 2),
                           substr(VALUE, 11, 2),
                           VALUE
                  into VALUE_day, VALUE_hour, VALUE_mins, VALUE_sec, VALUE_result
                  from v\\$dataguard_stats
                 where name = 'apply lag'; 
#监控阀值              天              时                    分
                if VALUE_day > 0 or  VALUE_hour > 0 or  VALUE_mins > 10 then
                        dbms_output.put_line(VALUE_result);
                else 
                        dbms_output.put_line('+00 00:00:00');
                end if;
else
        dbms_output.put_line('VALUE_null');
end if;
        end;                 
/
EOF`

if [ "$standby_time" = '+00 00:00:00' ] ; then
pri_res=`$con_sys@Primary_DB <<EOF
    set pagesize 0;
    SET FEEDBACK off;
    SET HEADING off;
select to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v\\$database;
EOF`
standby_res=`$con_sys <<EOF
    set pagesize 0;
    SET FEEDBACK off;
    SET HEADING off;
select to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v\\$database;
EOF`
res=`echo  $(($(date +%s -d "${pri_res}") - $(date +%s -d "${standby_res}"))) | awk '{t=split("60 s 60 mi 24 d 999 ",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`
# 延迟时间秒转换为分
res_min=$((($(date +%s -d "${pri_res}") - $(date +%s -d "${standby_res}"))/60))
#                      监控阀值
        if [ $res_min -gt 10 ];then
                standby_time=$res
        fi
fi

echo "$standby_time"
}
f_check_standby_time

脚本下载:check_standby_time.sh

执行:

-- 输出:
[oracle@standby ~]$ sh check_standbt_time.sh  
standby_time: +00 00:00:00    -------->apply lag 的值
pri_res: 2022-11-08 21:50:13  --------> 主库的scn时间
standby_res: 2022-11-08 21:47:24 --------> 备库的scn
2mi49s                         --------> 脚本最终输出值
-- 同步正常
[oracle@standby ~]$ sh check_standbt_time.sh  
+00 00:00:00
-- 同步异常:
[oracle@standby ~]$ sh check_standbt_time.sh  
3mi43s

欢迎赞赏支持或留言指正

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
Z
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论