背景
從遇到DG 同步延遲之奇怪的經(jīng)典報錯:ORA-16191這個報錯,從而受到啟發(fā),再通過DG standby_time 監(jiān)控腳本優(yōu)化邏輯,完成以下腳本的編寫,希望對大家有所有幫助。
一、創(chuàng)建主庫的tns_name
Primary_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.30)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = primary)
)
)
二、腳本
- 注意:這個位置要修改成上面的tns_name

- 監(jiān)控閥值:2處都需要調(diào)
1、這里可調(diào)天、時、分

2、 這里只能調(diào)分

#!/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';
#監(jiān)控閥值 天 時 分
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
# 測試連接主庫情況,tnsping 報TNS-12543 表示主庫異常
tns_num=`tnsping Primary_DB | grep 'TNS-12543' | wc -l`
if [ $tns_num -eq 1 ] ; then
echo "Primary db not ok!"
else
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}'`
# 延遲時間秒轉(zhuǎn)換為分
res_min=$((($(date +%s -d "${pri_res}") - $(date +%s -d "${standby_res}"))/60))
# 監(jiān)控閥值
if [ $res_min -gt 10 ];then
standby_time=$res
fi
fi
fi
echo "$standby_time"
}
f_check_standby_time
執(zhí)行:
-- 輸出:
[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_索引重建—優(yōu)化索引碎片》
《Oracle 自動收集統(tǒng)計信息機制》
《Oracle 腳本實現(xiàn)簡單的審計功能》
《oracle 監(jiān)控表空間腳本 每月10號0點至06點不報警》
《DBA_TAB_MODIFICATIONS表的刷新策略測試》
《FY_Recover_Data.dbf》
《Oracle RAC 集群遷移文件操作.pdf》
《Oracle Date 字段索引使用測試.dbf》
《Oracle 診斷案例 :因應(yīng)用死循環(huán)導(dǎo)致的CPU過高》
《Oracle 慢SQL監(jiān)控腳本》
《Oracle 慢SQL監(jiān)控測試及監(jiān)控腳本.pdf》
《記錄一起索引rebuild與收集統(tǒng)計信息的事故》
《RAC DG刪除備庫redo時報ORA-01623》
《ASH報告發(fā)現(xiàn):os thread startup 等待事件分析》
《問答榜上引發(fā)的Oracle并行的探究(一)》
《問答榜上引發(fā)的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系統(tǒng)一步一步 RAC 11.2.0.4升級19.3.pdf
《整理后_RAC_11.2.0.4升級19c.pdf
歡迎贊賞支持或留言指正




