背景
从遇到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
- 监控阀值:2处都需要调
1、这里可调天、时、分
2、 这里只能调分
#!/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
执行:
-- 输出:
[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
文章推荐
《Oracle_索引重建—优化索引碎片》
《Oracle 自动收集统计信息机制》
《Oracle 脚本实现简单的审计功能》
《oracle 监控表空间脚本 每月10号0点至06点不报警》
《DBA_TAB_MODIFICATIONS表的刷新策略测试》
《FY_Recover_Data.dbf》
《Oracle RAC 集群迁移文件操作.pdf》
《Oracle Date 字段索引使用测试.dbf》
《Oracle 诊断案例 :因应用死循环导致的CPU过高》
《Oracle 慢SQL监控脚本》
《Oracle 慢SQL监控测试及监控脚本.pdf》
《记录一起索引rebuild与收集统计信息的事故》
《RAC DG删除备库redo时报ORA-01623》
《ASH报告发现:os thread startup 等待事件分析》
《问答榜上引发的Oracle并行的探究(一)》
《问答榜上引发的Oracle并行的探究(二)》
– 安装系列
文章推荐
《ORACLE_19C_linux安装.pdf》
《Oracle 19c-手工建库.pdf》
《19c单库升级19.11补丁.pdf
19c_rac补丁《19.11-p32841500》.pdf
《oracle_图形-单实例11.2.0.4升级19.3.pdf
《oracle_11.2.0.3升级11.2.0.4–单实例升级.pdf
《oracle_静默-单实例 11.2.0.4升级19.3.pdf
《CentOS_6.7系统一步一步 RAC 11.2.0.4升级19.3.pdf
《整理后_RAC_11.2.0.4升级19c.pdf
欢迎赞赏支持或留言指正