2026-03-12 20:23:15
This commit is contained in:
135
vg/dg_archivelog_gap.sql
Normal file
135
vg/dg_archivelog_gap.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
@@header
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display archivelog gap
|
||||
* Parameter : 1 - Thread Number (Default '%')
|
||||
* 2 - From Sequence (Default '%')
|
||||
* 3 - To Sequence (Default '%')
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 23-APR-15 Vishal Gupta Added TimeDiff to display diff between current timestamp and max archlog fetched time
|
||||
* 17-SEP-14 Vishal Gupta Added logic to display 'FETCHING', when file is being fetched current via RFS.
|
||||
* 04-FEB-14 Vishal Gupta Made output changes
|
||||
* 04-Apr-10 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE thread="&&1"
|
||||
DEFINE from_sequence="&2"
|
||||
DEFINE to_sequence="&3"
|
||||
|
||||
set term off
|
||||
COLUMN _thread NEW_VALUE thread NOPRINT
|
||||
COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT
|
||||
COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT
|
||||
|
||||
SELECT DECODE('&&thread','','%','&&thread') "_thread"
|
||||
, DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence"
|
||||
, DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* M A I N S C R I P T
|
||||
************************************/
|
||||
|
||||
COLUMN thread# HEADING "T#" FORMAT 999
|
||||
COLUMN sequence# HEADING "SEQ#" FORMAT 99999999
|
||||
COLUMN applied HEADING "APPLIED" FORMAT a9
|
||||
COLUMN FIRST_TIME HEADING "FIRST_TIME" FORMAT a20
|
||||
COLUMN NEXT_TIME HEADING "NEXT_TIME" FORMAT a20
|
||||
COLUMN COMPLETION_TIME HEADING "COMPLETION_TIME" FORMAT a20
|
||||
COLUMN size_mb HEADING "SIZE_MB" FORMAT 99,999
|
||||
COLUMN delay_in_shipping HEADING "Delay in Shipping" FORMAT a20
|
||||
|
||||
/*
|
||||
* Not using WITH clause (aka CTE aka sub-query refactor'ing
|
||||
* , as it does not work on standby database in MOUNT mode and only works in OPEN mode.
|
||||
*/
|
||||
|
||||
select minmax.thread#
|
||||
, i.sequence# + minmax.min_sequence# - 1 sequence#
|
||||
--, l.thread#
|
||||
--, l.sequence#
|
||||
, l.applied
|
||||
, l.deleted
|
||||
, l.status
|
||||
, l.archived
|
||||
, NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),NVL2(m.sequence#,' Fetching ',' Missing ')) first_time
|
||||
, TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time
|
||||
, ROUND((l.blocks * l.block_size)/power(1024,2)) size_mb
|
||||
, l.fal
|
||||
, l.creator
|
||||
, l.registrar
|
||||
, TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time
|
||||
, LPAD(FLOOR(l.completion_time-l.next_time) ,2) || 'd '
|
||||
|| LPAD(FLOOR(MOD((l.completion_time-l.next_time) ,1) * 24 ),2) || 'h '
|
||||
|| LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24 ,1) * 60 ),2) || 'm '
|
||||
|| LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24*60,1) * 60 ),2) || 's' delay_in_shipping
|
||||
from (select rownum sequence#
|
||||
from dual
|
||||
connect by level <= 1500
|
||||
) i
|
||||
join (select l2.dest_id
|
||||
, l2.thread#
|
||||
, DECODE('&&from_sequence','%',max(DECODE(l2.applied, 'YES',l2.sequence#,0)) - 3,'&&from_sequence') min_sequence#
|
||||
, max(l2.sequence#) max_sequence#
|
||||
--, min(l2.first_time)
|
||||
--, max(l2.first_time)
|
||||
From v$archived_log l2
|
||||
where l2.dest_id = 1
|
||||
AND l2.thread# like '&&thread'
|
||||
group by l2.dest_id, l2.thread#
|
||||
order by l2.thread#
|
||||
) minmax on 1 = 1
|
||||
LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1 and l.status = 'A'
|
||||
LEFT OUTER JOIN gv$managed_standby m ON m.process in ('RFS') and m.thread# = minmax.thread# AND m.sequence# = i.sequence# + minmax.min_sequence# - 1
|
||||
WHERE 1=1
|
||||
and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence#
|
||||
AND minmax.thread# like '&&thread'
|
||||
AND i.sequence# + minmax.min_sequence# - 1
|
||||
BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence')
|
||||
AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence')
|
||||
order by minmax.thread#
|
||||
, i.sequence#
|
||||
--order by l.first_change#
|
||||
;
|
||||
|
||||
|
||||
SELECT l.thread#
|
||||
-- , l.applied
|
||||
-- , l.deleted
|
||||
-- , l.status
|
||||
-- , l.archived
|
||||
, max(sequence#)
|
||||
, TO_CHAR(sysdate,'DD-MON-YY HH24:MI:SS') current_time
|
||||
, TO_CHAR(max(l.next_time) ,'DD-MON-YY HH24:MI:SS') max_next_time
|
||||
, REPLACE(
|
||||
REPLACE(
|
||||
CAST(sysdate as TIMESTAMP) - CAST(max(l.next_time) as TIMESTAMP)
|
||||
,'.000000','')
|
||||
,'+0000000','+')
|
||||
time_diff
|
||||
FROM v$archived_log l
|
||||
--WHERE
|
||||
GROUP BY l.thread#
|
||||
-- , l.applied
|
||||
-- , l.deleted
|
||||
-- , l.status
|
||||
-- , l.archived
|
||||
ORDER BY --l.applied,
|
||||
l.thread#
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user