Restoring the Control File to a Non-Default location: Subset is Lost

Este artigo simulará a recuperação de control file em um banco de dados com os arquivos multiplexados, porém alterando o seu local de destino. Em suma, ao menos 1 control file deve estar disponível e intacto para que possamos fazer o procedimento.

Reconhecendo o nosso laboratório:

[oracle@oel8 trace]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Tue Aug 17 20:29:07 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 FROM V$DATABASE;
 
NAME      OPEN_MODE            LOG_MODE
--------- -------------------- ------------
RMANDB    READ WRITE           ARCHIVELOG
 
SQL> SHO PARAMETER CONTROL_FILES;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /oracle/dados/RMANDB/controlfi
                                                 le/o1_mf_h8nytrhd_.ctl, /oracl
                                                 e/fra/RMANDB/controlfile/o1_mf
                                                 _h8nytrty_.ctl

Para simular a perda, faremos a remoção do arquivo conforme abaixo, preservando ainda 1 control file:

SQL> !rm /oracle/dados/RMANDB/controlfile/o1_mf_h8nytrhd_.ctl
 
SQL>

Depois de pouco tempo, o Alert.log já reporta o problema:

2021-08-17T20:32:09.798804-03:00
Errors in file /oracle/18.0.0/base/diag/rdbms/rmandb/RMANDB/trace/RMANDB_mz00_11080.trc:
ORA-00202: control file: '/oracle/dados/RMANDB/controlfile/o1_mf_h8nytrhd_.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

Em certas ocasiões, a instância pode abortar ou pode continuar funcionando. Em meu caso, ao tentar rodar alguns comandos, o erro já é reportado:

SQL> SELECT NAME FROM V$DATABASE;
SELECT NAME FROM V$DATABASE
                 *
ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oracle/dados/RMANDB/controlfile/o1_mf_h8nytrhd_.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

Para iniciar o processo de recuperação, abortamos a instância, pois não é possível realizar um shutdown limpo se um control file está indisponível:

SQL> SHU ABORT;
ORACLE instance shut down.
SQL>

Subimos a instância em NOMOUNT:

SQL> STARTUP NOMOUNT;
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
SQL>

Alteramos o conteúdo do parâmetro CONTROL_FILES para o novo diretório desejado (no meu caso, vou alterar o local do arquivo que será recuperado):

SQL> ALTER SYSTEM SET CONTROL_FILES='/oracle/fra/RMANDB/controlfile/o1_mf_h8nytrty_.ctl','/oracle/dados/RMANDB/o1_mf_h8nytrhd_.ctl' SCOPE=SPFILE;
 
System altered.
 
SQL> SHU IMMEDIATE;
ORA-01507: database not mounted
 
 
ORACLE instance shut down.

Agora basta copiarmos um control file intacto para o arquivo perdido (em seu novo diretório):

SQL> !cp /oracle/fra/RMANDB/controlfile/o1_mf_h8nytrty_.ctl /oracle/dados/RMANDB/o1_mf_h8nytrhd_.ctl
 
SQL> !ls -lthr /oracle/dados/RMANDB/o1_mf_h8nytrhd_.ctl
-rw-r-----. 1 oracle oinstall 12M Aug 17 20:50 /oracle/dados/RMANDB/o1_mf_h8nytrhd_.ctl

Agora é só subir o banco de dados:

SQL> STARTUP;
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.
Database opened.
SQL> SELECT NAME FROM V$DATABASE;
 
NAME
---------
RMANDB

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.