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.