Categories

[Oracle] RMAN query to get backup status

You are here:
  • Main
  • Oracle
  • [Oracle] RMAN query to get backup status
< All Topics

Hi! we’ll see how to query rman catalog both in control file and in rman catalog database to get backup status. We’ll also see query to get status of backups in summary format, very useful to implement an RMAN backup report.

ENVIRONMENT

  • Oracle Linux 7 [OS]
  • Oracle RDBMS 12.2.0.1 [DATABASE]
  • Oracle RDBMS 12.2.0.1 [RMAN CATALOG]

1 – Control file query

  1. Connect to your Oracle database server (sqlplus sys/password@DB_SERVICE)
  2. Run below query:
  • View RMAN backup status in the last 7 days for all input types with start, stop and elapsed time:
--QUERY
col STATUS format a9
col ELA format 999.99
col START_TIME for a15
col end_time for a15
select SESSION_KEY,
       INPUT_TYPE,
	   STATUS,
       to_char(START_TIME,'mm/dd/yy hh24:mi') START_TIME,
       to_char(END_TIME,'mm/dd/yy hh24:mi') end_time,
       elapsed_seconds/3600 ELA
  from V$RMAN_BACKUP_JOB_DETAILS
where START_TIME > sysdate-7
order by session_key;

--OUTPUT
SESSION_KEY INPUT_TYPE    STATUS    START_TIME      END_TIME            ELA
----------- ------------- --------- --------------- --------------- -------
      33828 CONTROLFILE   COMPLETED 04/19/20 18:00  04/19/20 18:00      .00
      33839 DB INCR       COMPLETED 04/20/20 17:00  04/20/20 17:12      .20
      33841 DB INCR       COMPLETED 04/20/20 17:12  04/20/20 17:13      .02
      33850 ARCHIVELOG    COMPLETED 04/20/20 17:14  04/20/20 18:23     1.15
      33858 CONTROLFILE   COMPLETED 04/20/20 18:24  04/20/20 18:25      .00
      33869 DB INCR       COMPLETED 04/21/20 17:00  04/21/20 17:13      .21
      33871 DB INCR       COMPLETED 04/21/20 17:13  04/21/20 17:14      .02
      33880 ARCHIVELOG    COMPLETED 04/21/20 17:14  04/21/20 20:02     2.80
      33888 CONTROLFILE   COMPLETED 04/21/20 20:31  04/21/20 20:33      .05
      33899 DB INCR       COMPLETED 04/22/20 17:00  04/22/20 17:18      .31
      33901 DB INCR       COMPLETED 04/22/20 17:19  04/22/20 17:20      .02
      33910 ARCHIVELOG    COMPLETED 04/22/20 17:21  04/22/20 19:39     2.30
      33918 CONTROLFILE   COMPLETED 04/22/20 19:40  04/22/20 19:41      .00
      33929 DB INCR       COMPLETED 04/23/20 17:00  04/23/20 17:16      .26
      33931 DB INCR       COMPLETED 04/23/20 17:16  04/23/20 17:17      .02
      33940 ARCHIVELOG    COMPLETED 04/23/20 17:18  04/23/20 19:37     2.32
      33948 CONTROLFILE   COMPLETED 04/23/20 19:38  04/23/20 19:39      .00
      33971 DB INCR       COMPLETED 04/24/20 17:00  04/24/20 17:11      .18
      33973 DB INCR       COMPLETED 04/24/20 17:11  04/24/20 17:12      .02
      33982 ARCHIVELOG    FAILED    04/24/20 17:13  04/24/20 18:06      .90
      33984 DB INCR       COMPLETED 04/25/20 17:00  04/25/20 17:07      .11
      33986 DB INCR       COMPLETED 04/25/20 17:07  04/25/20 17:07      .01
      33995 ARCHIVELOG    COMPLETED 04/25/20 17:08  04/25/20 18:52     1.74
      34003 CONTROLFILE   COMPLETED 04/25/20 18:53  04/25/20 18:53      .00
      34014 DB INCR       COMPLETED 04/26/20 17:00  04/26/20 17:03      .06
      34016 DB INCR       COMPLETED 04/26/20 17:03  04/26/20 17:04      .01
      34025 ARCHIVELOG    RUNNING   04/26/20 17:05  04/26/20 17:35      .51
  • View estimated remaining percentage of completion for current running RMAN backup
--QUERY
SET lines 100
COL SESS for a20
col OPNAME for a30
SELECT ''''||SID||','||SERIAL#||',@'||INST_ID||'''' SESS,
       decode(OPNAME,
              'RMAN: aggregate input', 'TOTAL PROGRESS',
              'CURRENT: '||substr(OPNAME, 7, length(OPNAME))) OPNAME,
       CONTEXT,
       SOFAR,
       TOTALWORK,
       ROUND(SOFAR/TOTALWORK*100, 2) "%_COMPLETE"
  FROM GV$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
      AND TOTALWORK != 0
      AND SOFAR <> TOTALWORK;

--OUTPUT
SESS                 OPNAME                            CONTEXT      SOFAR  TOTALWORK %_COMPLETE
-------------------- ------------------------------ ---------- ---------- ---------- ----------
'532,33285,@1'       TOTAL PROGRESS                          3  302359015 1244764536      24.29
'281,18465,@1'       CURRENT: archived log backup            1    1279558    2303536      55.55
'678,33453,@1'       CURRENT: archived log backup            1    1179659    3161233      37.32

2 – DB catalog query

  1. Connect to your RMAN catalog database (sqlplus RMAN_SCHEMA/password@RMAN_SERVICE)
  2. Run below query:
  • View RMAN backup status in the last 7 days for all input types with completion time, TAG and KEEP options
--OUTPUT
set lines 150
col BACKUP_TYPE for a12
select BS.BS_KEY,
       BS.RECID,
       BS.STAMP,
       DECODE(BS.BACKUP_TYPE,
              'D', 'FULL/L0',
              'I', 'L1',
              'L', 'ARCHIVELOG',
              'N/A') BACKUP_TYPE,
       BS.CONTROLFILE_INCLUDED,
       to_char(BS.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI') COMPLETION_TIME,
       BP.TAG,
       BS.KEEP,
       BS.KEEP_UNTIL,
       BS.KEEP_OPTIONS
  from (rc_backup_set BS inner join rc_backup_piece BP on BS.SET_STAMP=BP.SET_STAMP and BS.SET_COUNT=BP.SET_COUNT)
where BS.COMPLETION_TIME > sysdate-7
      --and BP.TAG like '%TAG%'
order by BS.BS_KEY;

--OUTPUT
    BS_KEY      RECID      STAMP BACKUP_TYPE  CONTROL COMPLETION_TIME  TAG                              KEE KEEP_UNTI KEEP_OPTION
---------- ---------- ---------- ------------ ------- ---------------- -------------------------------- --- --------- -----------
   2008480     100877 1038694668 FULL/L0      BACKUP  2020-04-25 22:17 LASTCONTROLFILE                  NO
   2008480     100877 1038694668 FULL/L0      BACKUP  2020-04-25 22:17 LASTCONTROLFILE                  NO
   2008496     100878 1038694671 FULL/L0      NONE    2020-04-25 22:17 LASTSPFILE                       NO
   2008496     100878 1038694671 FULL/L0      NONE    2020-04-25 22:17 LASTSPFILE                       NO
   2008682     100881 1038700816 ARCHIVELOG   NONE    2020-04-26 00:00 TAG20200426T000015               NO
   2008683     100882 1038700816 ARCHIVELOG   NONE    2020-04-26 00:00 TAG20200426T000015               NO
   2008720     100883 1038715215 ARCHIVELOG   NONE    2020-04-26 04:00 TAG20200426T040014               NO
   2008721     100884 1038715216 ARCHIVELOG   NONE    2020-04-26 04:00 TAG20200426T040014               NO
   2008791     100885 1038729682 ARCHIVELOG   NONE    2020-04-26 08:01 TAG20200426T080027               NO
   2008792     100886 1038729727 ARCHIVELOG   NONE    2020-04-26 08:02 TAG20200426T080027               NO
   2008871     100887 1038744085 ARCHIVELOG   NONE    2020-04-26 12:01 TAG20200426T120026               NO
   2008872     100888 1038744122 ARCHIVELOG   NONE    2020-04-26 12:02 TAG20200426T120026               NO
   2008951     100889 1038758475 ARCHIVELOG   NONE    2020-04-26 16:01 TAG20200426T160017               NO
   2008952     100890 1038758491 ARCHIVELOG   NONE    2020-04-26 16:01 TAG20200426T160017               NO
   2008953     100891 1038758498 ARCHIVELOG   NONE    2020-04-26 16:01 TAG20200426T160017               NO
  • View RMAN backup summary status for all types (COPY/BACKUPSET – FULL/L0/L1/ARCH) in hours
--QUERY
set lines 200
WITH
BACKUP_BACKUPSET AS /*BACKUP AS BACKUPSET RECORDS*/
(select d.DBID, d.name, input_type, incremental_level, max(END_TIME) last, ceil((sysdate - max(END_TIME))*24) hours
  from
    RC_DATABASE                d,
    RC_RMAN_BACKUP_JOB_DETAILS j,
    RC_BACKUP_SET_DETAILS      s
where d.dbid     = (select dbid from RC_DATABASE)
  and j.DB_KEY   = d.db_key
  and j.end_time > sysdate-30
  and j.status like 'COMPLETED%'
  and s.db_key            (+)= j.db_key
  and s.session_key       (+)= j.session_key
group by
  d.DBID,
  d.name,
  input_type,
  incremental_level),
BACKUP_COPY AS  /*BACKUP AS COPY RECORDS*/
(select d.DBID, d.name, 'DB FULL' input_type, null incremental_level, max(END_TIME) last, ceil((sysdate -  max(END_TIME))*24) hours
  from
    RC_DATABASE                d,
    RC_BACKUP_COPY_DETAILS     j,
	RC_RMAN_STATUS             s
where d.dbid            = (select dbid from RC_DATABASE)
  and j.DB_KEY          = d.db_key
  and j.RSR_KEY         = s.RSR_KEY
  and j.COMPLETION_TIME > sysdate-30
  and s.status like 'COMPLETED%'
group by
  d.DBID,
  d.name)
select /*+rule*/
  dbid,
  name,
  max(decode(input_type,'DB FULL',hours,-1))                                     last_full,
  max(decode(input_type,'DB INCR',decode(incremental_level,   0,hours,null),-1)) last_lev0,
  max(decode(input_type,'DB INCR',decode(incremental_level,   1,hours,null),-1)) last_lev1,
  max(decode(input_type,'DB INCR',decode(incremental_level,null,hours,null),-1)) last_bck,
  max(decode(input_type,'ARCHIVELOG',hours,-1))                                  last_arch
from (select * from BACKUP_BACKUPSET
      union all
      select * from BACKUP_COPY)
group by dbid, name;

--OUTPUT
      DBID NAME        LAST_FULL  LAST_LEV0  LAST_LEV1   LAST_BCK  LAST_ARCH
---------- ---------- ---------- ---------- ---------- ---------- ----------
1446405546 DB_NAME            -1        159         23         23          1

The last query is very usefull for a report summary. You can schedule a script that, for all schemas in recovery catalog, executes the query to extract a summary report of all backups. The output columns have the following meaning:

  1. DBID: Oracle unique database ID
  2. NAME: Oracle database name
  3. LAST_FULL: time in hours since the last full backup as backupset or copy (if -1 there aren’t backup in last 30 days)
  4. LAST_LEV0: time in hours since the last L0 backup (if -1 there aren’t backup in last 30 days)
  5. LAST_LEV1: time in hours since the last L1 incremental/differential backup (if -1 there aren’t backup in last 30 days)
  6. LAST_BCK: time in hours since the last database backup, the minimum between FULL/L0/L1 (if -1 there aren’t backup in last 30days)
  7. LAST_ARCH: time in hours since the last archivelog backup (if -1 there aren’t backup in last 30days)

With this output you can check if your backup policy are respected for all databases.

Table of Contents