Performing Complete Recovery of the Whole Non-CDB Database in ARCHIVELOG Mode

Neste artigo, vamos simular a perda de datafiles do nosso banco non-cdb (system e non-system datafiles) e a recuperação completa do banco de dados (que está rodando em archivelog mode). Vamos tomar conhecimento do nosso laboratório:

[oracle@oel8 datafile]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Sat Jul 24 00:07:03 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.13.0.0.0
 
SQL> SELECT NAME,OPEN_MODE,LOG_MODE,CDB FROM V$DATABASE;
 
NAME      OPEN_MODE            LOG_MODE     CDB
--------- -------------------- ------------ ---
RMANDB    READ WRITE           ARCHIVELOG   NO

Realizando um backup Full do nosso banco de dados:

[oracle@oel8 datafile]$ rman target /
 
Recovery Manager: Release 18.0.0.0.0 - Production on Sat Jul 24 00:07:39 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.
 
connected to target database: RMANDB (DBID=3825250984)
 
RMAN> BACKUP DATABASE;
 
Starting backup at 2021-07-24:00:08:11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=78 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oracle/dados/RMANDB/datafile/o1_mf_system_jhq037qr_.dbf
input datafile file number=00003 name=/oracle/dados/RMANDB/datafile/o1_mf_sysaux_jhq037wr_.dbf
input datafile file number=00004 name=/oracle/dados/RMANDB/datafile/o1_mf_undotbs1_jhq037yg_.dbf
input datafile file number=00005 name=/oracle/dados/RMANDB/datafile/ts_cortex_catalog.dbf
input datafile file number=00002 name=/oracle/dados/RMANDB/datafile/ts_hipo_catalog.dbf
input datafile file number=00007 name=/oracle/dados/RMANDB/datafile/o1_mf_users_jhq0380t_.dbf
channel ORA_DISK_1: starting piece 1 at 2021-07-24:00:08:12
channel ORA_DISK_1: finished piece 1 at 2021-07-24:00:08:47
piece handle=/oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_nnndf_TAG20210724T000811_jhq10wjb_.bkp tag=TAG20210724T000811 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35
Finished backup at 2021-07-24:00:08:47
 
Starting Control File and SPFILE Autobackup at 2021-07-24:00:08:47
piece handle=/oracle/fra/RMANDB/autobackup/2021_07_24/o1_mf_s_1078704527_jhq11zgw_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2021-07-24:00:08:48

Criando uma tabela simples após este backup, e gerando alguns archives:

RMAN> CREATE TABLE BSS.ASWAN (DESCRICAO VARCHAR2(50));
 
Statement processed
 
RMAN> INSERT INTO BSS.ASWAN (DESCRICAO) VALUES ('TESTE DO BRUNO');
 
Statement processed
 
RMAN> COMMIT;
 
Statement processed
 
RMAN> ALTER SYSTEM SWITCH LOGFILE;
 
Statement processed
 
RMAN> ALTER SYSTEM SWITCH LOGFILE;
 
Statement processed
 
RMAN> ALTER SYSTEM SWITCH LOGFILE;
 
Statement processed

Realizando um backup dos archived redo logs (que serão armazenados em um backupset diferente do backup full). Após o backup desses arquivos, os mesmos serão removidos:

RMAN> BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
 
Starting backup at 2021-07-24:00:11:21
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=13 RECID=168 STAMP=1078703629
input archived log thread=1 sequence=14 RECID=172 STAMP=1078703629
input archived log thread=1 sequence=15 RECID=169 STAMP=1078703629
input archived log thread=1 sequence=16 RECID=170 STAMP=1078703629
input archived log thread=1 sequence=17 RECID=171 STAMP=1078703629
input archived log thread=1 sequence=18 RECID=173 STAMP=1078703724
input archived log thread=1 sequence=19 RECID=174 STAMP=1078704602
input archived log thread=1 sequence=20 RECID=175 STAMP=1078704605
input archived log thread=1 sequence=21 RECID=176 STAMP=1078704609
input archived log thread=1 sequence=22 RECID=177 STAMP=1078704682
channel ORA_DISK_1: starting piece 1 at 2021-07-24:00:11:22
channel ORA_DISK_1: finished piece 1 at 2021-07-24:00:11:23
piece handle=/oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_annnn_TAG20210724T001122_jhq16tdf_.bkp tag=TAG20210724T001122 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/oracle/archives/1_13_1078693497.dbf RECID=168 STAMP=1078703629
archived log file name=/oracle/archives/1_14_1078693497.dbf RECID=172 STAMP=1078703629
archived log file name=/oracle/archives/1_15_1078693497.dbf RECID=169 STAMP=1078703629
archived log file name=/oracle/archives/1_16_1078693497.dbf RECID=170 STAMP=1078703629
archived log file name=/oracle/archives/1_17_1078693497.dbf RECID=171 STAMP=1078703629
archived log file name=/oracle/archives/1_18_1078693497.dbf RECID=173 STAMP=1078703724
archived log file name=/oracle/archives/1_19_1078693497.dbf RECID=174 STAMP=1078704602
archived log file name=/oracle/archives/1_20_1078693497.dbf RECID=175 STAMP=1078704605
archived log file name=/oracle/archives/1_21_1078693497.dbf RECID=176 STAMP=1078704609
archived log file name=/oracle/archives/1_22_1078693497.dbf RECID=177 STAMP=1078704682
Finished backup at 2021-07-24:00:11:23
 
Starting Control File and SPFILE Autobackup at 2021-07-24:00:11:23
piece handle=/oracle/fra/RMANDB/autobackup/2021_07_24/o1_mf_s_1078704683_jhq16w12_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2021-07-24:00:11:24

Vamos simular a remoção dos datafiles do banco:

RMAN> REPORT SCHEMA;
 
Report of database schema for database with db_unique_name RMANDB
 
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    880      SYSTEM               YES     /oracle/dados/RMANDB/datafile/o1_mf_system_jhq037qr_.dbf
2    120      TS_HIPO_CATALOG      NO      /oracle/dados/RMANDB/datafile/ts_hipo_catalog.dbf
3    730      SYSAUX               NO      /oracle/dados/RMANDB/datafile/o1_mf_sysaux_jhq037wr_.dbf
4    305      UNDOTBS1             YES     /oracle/dados/RMANDB/datafile/o1_mf_undotbs1_jhq037yg_.dbf
5    200      TS_CORTEX_CATALOG    NO      /oracle/dados/RMANDB/datafile/ts_cortex_catalog.dbf
7    16       USERS                NO      /oracle/dados/RMANDB/datafile/o1_mf_users_jhq0380t_.dbf
 
List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    69       TEMP                 32767       /oracle/dados/RMANDB/datafile/o1_mf_temp_h8nyvt1f_.tmp
 
RMAN> host 'rm /oracle/dados/RMANDB/datafile/o1_mf_system_jhq037qr_.dbf /oracle/dados/RMANDB/datafile/ts_hipo_catalog.dbf /oracle/dados/RMANDB/datafile/o1_mf_sysaux_jhq037wr_.dbf /oracle/dados/RMANDB/datafile/o1_mf_undotbs1_jhq037yg_.dbf /oracle/dados/RMANDB/datafile/ts_cortex_catalog.dbf /oracle/dados/RMANDB/datafile/o1_mf_users_jhq0380t_.dbf';
 
host command complete

Baixando a instância e montando o banco:

SQL> SHU IMMEDIATE;
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/oracle/dados/RMANDB/datafile/o1_mf_system_jhq037qr_.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> SHU ABORT;
ORACLE instance shut down.
SQL> STARTUP MOUNT;
ORACLE instance started.
 
Total System Global Area 1610612016 bytes
Fixed Size                  8658224 bytes
Variable Size             520093696 bytes
Database Buffers         1073741824 bytes
Redo Buffers                8118272 bytes
Database mounted.

Antes de disparar o restore do banco, podemos validar a consistêcia do backup que será usado na operação através do comando abaixo. Obviamente, quanto maior o banco e seu backup, mais tempo esta validação durará.

RMAN> RESTORE DATABASE VALIDATE;
 
Starting restore at 2021-07-24:00:22:04
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=36 device type=DISK
 
channel ORA_DISK_1: starting validation of datafile backup set
channel ORA_DISK_1: reading from backup piece /oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_nnndf_TAG20210724T000811_jhq10wjb_.bkp
channel ORA_DISK_1: piece handle=/oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_nnndf_TAG20210724T000811_jhq10wjb_.bkp tag=TAG20210724T000811
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
Finished restore at 2021-07-24:00:22:06

Disparando restore do banco:

RMAN> RESTORE DATABASE;
 
Starting restore at 2021-07-24:00:23:54
using channel ORA_DISK_1
 
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /oracle/dados/RMANDB/datafile/o1_mf_system_jhq037qr_.dbf
channel ORA_DISK_1: restoring datafile 00002 to /oracle/dados/RMANDB/datafile/ts_hipo_catalog.dbf
channel ORA_DISK_1: restoring datafile 00003 to /oracle/dados/RMANDB/datafile/o1_mf_sysaux_jhq037wr_.dbf
channel ORA_DISK_1: restoring datafile 00004 to /oracle/dados/RMANDB/datafile/o1_mf_undotbs1_jhq037yg_.dbf
channel ORA_DISK_1: restoring datafile 00005 to /oracle/dados/RMANDB/datafile/ts_cortex_catalog.dbf
channel ORA_DISK_1: restoring datafile 00007 to /oracle/dados/RMANDB/datafile/o1_mf_users_jhq0380t_.dbf
channel ORA_DISK_1: reading from backup piece /oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_nnndf_TAG20210724T000811_jhq10wjb_.bkp
channel ORA_DISK_1: piece handle=/oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_nnndf_TAG20210724T000811_jhq10wjb_.bkp tag=TAG20210724T000811
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 2021-07-24:00:24:29

Disparando comando de recover do banco. O interessante aqui é que, como deletamos os nossos archived redo logs, no processo de recover será realizado o restore desses arquivos para permitir a recuperação dos datafiles:

RMAN> RECOVER DATABASE;
 
Starting recover at 2021-07-24:00:28:21
using channel ORA_DISK_1
 
starting media recovery
 
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=19
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=20
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=21
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=22
channel ORA_DISK_1: reading from backup piece /oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_annnn_TAG20210724T001122_jhq16tdf_.bkp
channel ORA_DISK_1: piece handle=/oracle/fra/RMANDB/backupset/2021_07_24/o1_mf_annnn_TAG20210724T001122_jhq16tdf_.bkp tag=TAG20210724T001122
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/oracle/archives/1_19_1078693497.dbf thread=1 sequence=19
archived log file name=/oracle/archives/1_20_1078693497.dbf thread=1 sequence=20
media recovery complete, elapsed time: 00:00:01
Finished recover at 2021-07-24:00:28:23

Abrindo o banco e validando a nossa tabela de teste:

RMAN> ALTER DATABASE OPEN;
 
Statement processed
 
RMAN> SELECT * FROM BSS.ASWAN;
 
DESCRICAO
--------------------------------------------------
TESTE DO BRUNO

Como não fizemos a abertura do banco em resetlogs, o mesmo permanece com o seu ID incarnation:

RMAN> SELECT INCARNATION#, RESETLOGS_CHANGE#, PRIOR_RESETLOGS_CHANGE#, STATUS FROM V$DATABASE_INCARNATION ORDER BY 1;
 
INCARNATION# RESETLOGS_CHANGE# PRIOR_RESETLOGS_CHANGE# STATUS
------------ ----------------- ----------------------- -------
           1                 1                       0 PARENT
           2           1477662                       1 PARENT
           3           3489797                 1477662 CURRENT

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.