Restoring the SPFILE from the alert.log file

Quando perdemos o SPFILE de um ambiente Oracle, temos 3 alternativas de recuperação: from Memory , Autobackup ou como última opção, utilizar o alert.log para criar um PFILE, e dele, um SPFILE. Esse artigo explorará este último cenário.

Reconhecendo o nosso laboratório:

[oracle@oel8 RMANDB]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Mon Aug 16 21:11:15 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 SPFILE;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/18.0.0/product/dbs/spf
                                                 ileRMANDB.ora

Toda vez que subimos a instância do Oracle, é escrito em seu arquivo Alert os parâmetros e valores usados nesse startup. Vamos coletar em nosso banco de teste essas informações:

[oracle@oel8 trace]$ pwd
/oracle/18.0.0/base/diag/rdbms/rmandb/RMANDB/trace
[oracle@oel8 trace]$ vi alert_RMANDB.log

Para simular a perda do SPFILE, vou renomear o arquivo vigente:

SQL> ! mv /oracle/18.0.0/product/dbs/spfileRMANDB.ora /oracle/18.0.0/product/dbs/spfileRMANDB.BSS
 
SQL> ! ls -lthr /oracle/18.0.0/product/dbs/spfileRMANDB.BSS
-rw-r-----. 1 oracle oinstall 9.5K Aug 16 20:48 /oracle/18.0.0/product/dbs/spfileRMANDB.BSS

Baixando a instância e visualizando a mensagem de erro ao tentar iniciá-la:

SQL> SHU IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/oracle/18.0.0/product/dbs/initRMANDB.ora'

Nesta etapa, podemos criar um PFILE com o nome “$ORACLE_HOME/dbs/init<SID>”, utilizando o conteúdo dos parâmetros retirados do arquivo Alert.log. No meu caso, o PFILE ficou da seguinte maneira:

[oracle@oel8 dbs]$ cd $ORACLE_HOME/dbs
[oracle@oel8 dbs]$ vi initRMANDB.ora
[oracle@oel8 dbs]$ ls -lthr initRMANDB.ora
-rw-r--r--. 1 oracle oinstall 3.9K Aug 16 21:23 initRMANDB.ora

Iniciando instância com o PFILE:

[oracle@oel8 dbs]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Mon Aug 16 21:24:29 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
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> SHO PARAMETER SPFILE;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

Criando SPFILE a partir do PFILE:

SQL> CREATE SPFILE FROM PFILE;
 
File created.

Baixando e subindo a instância, agora com o novo SPFILE:

SQL> SHU IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
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> SHO PARAMETER SPFILE;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/18.0.0/product/dbs/spf
                                                 ileRMANDB.ora

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.