Browse Docs

๐Ÿ’พ Backup & Recovery (RMAN)

Connect

1rman
2RMAN> connect target
1rman target /

With a recovery catalog:

1rman target sys/<pwd>@orcl catalog repo/<pwd>@rmancat
1RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;   -- enables restoring the CONTROLFILE.
2RMAN> SHOW ALL;                              -- the whole RMAN configuration.

Backup

1RMAN> BACKUP DATABASE;                                    -- full backup.
2RMAN> BACKUP DATABASE PLUS ARCHIVELOG;                    -- full + archived logs.
3RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;                -- level 0 = baseline.
4RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;                -- level 1 = incremental.
5RMAN> BACKUP CUMULATIVE INCREMENTAL LEVEL 1 DATABASE;     -- cumulative increments.
6RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;            -- compressed full backup.
7RMAN> BACKUP ARCHIVELOG UNTIL TIME 'sysdate - 1/24' ALL DELETE INPUT;

Run a script:

1rman cmdfile rman_backup_orcl_arc_20200330.rcv

A full-backup run {} block:

1run {
2  ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT '/mnt/rman-backup/%d-FULL-%T-%U';
3  BACKUP INCREMENTAL LEVEL 0 DATABASE INCLUDE CURRENT CONTROLFILE PLUS ARCHIVELOG TAG 'FULL-0-ORCL';
4  BACKUP SPFILE TAG 'SPFILE-ORCL';
5  CROSSCHECK BACKUP;
6  RELEASE CHANNEL CH1;
7}

Verify

1RMAN> LIST BACKUP;
2RMAN> CROSSCHECK BACKUP;            -- are the backups where they should be?
3RMAN> DELETE EXPIRED BACKUP;        -- delete backups whose media went missing.
4RMAN> BACKUP VALIDATE DATABASE;     -- simulate a backup.
5RMAN> RESTORE VALIDATE DATABASE;    -- simulate a restore.

Retention policy

  • Redundancy (e.g. 3): every full/incremental older than 3 backups is obsolete.
  • Recovery window (e.g. 1 month): everything older than the window is obsolete.
1RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
2RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
3RMAN> REPORT OBSOLETE;
4RMAN> DELETE NOPROMPT OBSOLETE;

Cleanup

 1-- all archived logs older than 7 days
 2RMAN> DELETE NOPROMPT BACKUP COMPLETED BEFORE 'sysdate-7';
 3
 4RMAN> RUN {
 5  CROSSCHECK ARCHIVELOG ALL;
 6  CROSSCHECK BACKUP;
 7  DELETE NOPROMPT OBSOLETE;
 8  DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
 9  DELETE NOPROMPT EXPIRED BACKUP;
10}

Re-catalog files that RMAN no longer detects:

1RMAN> CATALOG START WITH '+FRA/MYDB';

Restore

To a point in time (SCN or date)

1RUN {
2  SHUTDOWN IMMEDIATE;
3  STARTUP MOUNT;
4  SET UNTIL SCN 527478;     -- the SCN just before the action to undo.
5  RESTORE DATABASE;
6  RECOVER DATABASE;
7}
1RUN {
2  SHUTDOWN IMMEDIATE;
3  STARTUP MOUNT;
4  SET UNTIL TIME "TO_DATE('28-07-2020:14:00:04','DD-MM-YYYY:hh24:mi:ss')";
5  RESTORE DATABASE;
6  RECOVER DATABASE;
7}
8ALTER DATABASE OPEN RESETLOGS;

Restore a datafile (or the whole database)

1RMAN> RESTORE DATAFILE 1;
2RMAN> RECOVER DATAFILE 1;
3RMAN> ALTER DATABASE OPEN;
4
5RMAN> RESTORE DATABASE;
6RMAN> RECOVER DATABASE;
7RMAN> ALTER DATABASE OPEN;

The recommended 3-step flow (order matters):

1RMAN> LIST FAILURE;
2RMAN> ADVISE FAILURE;
3RMAN> REPAIR FAILURE;

Run several commands together:

1RMAN> RUN {
2  RESTORE DATABASE;
3  RECOVER DATABASE;
4  ALTER DATABASE OPEN;
5}

Lost CONTROLFILE

1RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
2RMAN> ALTER DATABASE OPEN RESETLOGS;    -- new incarnation.
3RMAN> BACKUP DATABASE;
4RMAN> CATALOG START WITH '/backup/';

Restore one tablespace

1RMAN> RUN {
2  ALLOCATE CHANNEL d1 DEVICE TYPE DISK;
3  ALLOCATE CHANNEL d2 DEVICE TYPE DISK;
4  RESTORE TABLESPACE 'SYSTEM_TBS';
5  RECOVER TABLESPACE 'SYSTEM_TBS';
6}

Duplicate a database

1RMAN> RUN {
2  ALLOCATE CHANNEL d1 DEVICE TYPE DISK;
3  ALLOCATE CHANNEL d2 DEVICE TYPE DISK;
4  DUPLICATE TARGET DATABASE TO mydb_clone;
5}

Catalogue

1RMAN> REPORT SCHEMA;
Report of database schema for database with db_unique_name ORCL
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    30108    SYSTEM               YES     +DATA/orcl/datafile/system.260.923225363
2    9048     SYSAUX               NO      +DATA/orcl/datafile/sysaux.261.923225365
...

Troubleshooting

FRA full (ORA-19804 / ORA-19815)

1grep -i "ORA-" $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
2-- ORA-19815: WARNING: db_recovery_file_dest_size of ... bytes is 100.00% used

Recover space:

1sqlplus / as sysdba
2startup mount;
3rman target /
4RMAN> DELETE OBSOLETE;
5-- hardcore:
6RMAN> DELETE NOPROMPT ARCHIVELOG ALL;
7alter database open;

If +FRA is exhausted and a redo can’t be archived (ORA-16038):

 1shutdown immediate;
 2startup mount;
 3alter database noarchivelog;
 4alter database clear logfile group 4;
 5alter database open;
 6
 7shutdown immediate;
 8startup mount;
 9alter database archivelog;
10alter database open;

ORA-03113: end-of-file on communication channel

1sqlplus / as sysdba
2startup nomount
3alter database mount;
4alter database clear unarchived logfile group 1;
5alter database clear unarchived logfile group 2;
6alter database clear unarchived logfile group 3;
7shutdown immediate
8startup

Then check:

1SELECT instance_name, status, database_status FROM v$instance;
Sunday, October 4, 2026 Saturday, August 3, 2024