Just share the sqls I often use to monitor DataGuard
Monitor log transport sql (primary):
SELECT DB_NAME, HOSTNAME, LOG_ARCHIVED, LOG_APPLIED,APPLIED_TIME,
LOG_ARCHIVED-LOG_APPLIED LOG_GAP
FROM
(
SELECT NAME DB_NAME
FROM V$DATABASE
),
(
SELECT UPPER(SUBSTR(HOST_NAME,1,(DECODE(INSTR(HOST_NAME,'.'),0,LENGTH(HOST_NAME),
(INSTR(HOST_NAME,'.')-1))))) HOSTNAME
FROM V$INSTANCE
),
(
SELECT MAX(SEQUENCE#) LOG_ARCHIVED
FROM V$ARCHIVED_LOG WHERE DEST_ID=1 AND ARCHIVED='YES'
),
(
SELECT MAX(SEQUENCE#) LOG_APPLIED
FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND APPLIED='YES'
),
(
SELECT TO_CHAR(MAX(COMPLETION_TIME),'DD-MON/HH24:MI') APPLIED_TIME
FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND APPLIED='YES'
);
Monitor recovery (standby)
select inst_id, process, status, count(*)
from gv$managed_standby
group by inst_id, process, status
order by inst_id, process, status;
Gap sql (standby):
set linesize 200
column max_redo_seq format a30
column max_recovery_seq format a30
column gap_seq format a30
SELECT thread,
max(redo) || ' : ' || max(next_scn_redo) as max_redo_seq,
max(recovery) || ' : ' || max(next_scn_recovery) as max_recovery_seq,
(max(redo) - max(recovery)) || ' : ' || (max(next_scn_redo) - max(next_scn_recovery)) as gap_seq
FROM (
select thread# as thread,
max(sequence#) as redo,
max(next_change#) as next_scn_redo,
0 as next_scn_recovery,
0 as recovery
from v$archived_log
group by thread#
union all
select thread# as thread,
0 as redo,
0 as next_scn_redo,
max(next_change#) as next_scn_recovery,
max(sequence#) as recovery
from v$log_history
group by thread# )
group by thread
order by thread
/
SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE FROM V$DATABASE
ALTER DATABASE REGISTER logfile '/oraarch/testdb/testdb_628319983_1_43377.arc';
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
No comments:
Post a Comment