Recovery cases: perte du spfile

Recovery en cas de perte du spfile. On le récupère à partir de l’autobackup, vers un autre fichier, qu’on peut copier à sa place initiale.

Un exemple sur une base de demo créée ici.

Je supprime spfile et init.ora

+ rm /app/oracle/product/12c/dbs/*DEMO100.ora

Je vérifie les paramètres sous sqlplus:

SQL> show parameter db_unique_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 DEMO100

SQL>  show parameter db_recovery_file_dest
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest		     string	 /u/DEMO/FRA

SQL>  show spparameter db_recovery_file_dest
db_recovery_file_dest_size	     big integer 4800M
SQL> ORA-01565: error in identifying file
'/app/oracle/product/12c/dbs/spfileDEMO100.ora'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

On a une erreur lorsqu’il s’agit de lire le spfile.


Recovery Manager: Release 12.1.0.1.0 - Production on Sun Nov 17 22:06:58 2013
Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
connected to target database: DEMO100 (DBID=2395255289)

RMAN> list failure;

RMAN> list failure;
using target database control file instead of recovery catalog
Database Role: PRIMARY

no failures found that match specification

Recovery Advisor ne propose rien

RMAN> restore spfile from autobackup;

RMAN> restore spfile from autobackup;
Starting restore at 17-NOV-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=243 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 11/17/2013 22:07:05
RMAN-06564: must use the TO clause when the instance is started with SPFILE

On ne peut pas le restaurer à sa place lorsque l’instance est démarrée.
On va le restaurer vers une destination temporaire.

RMAN> restore spfile to ‘/tmp/spfileDEMO100.ora’ from autobackup ;

RMAN> restore spfile to '/tmp/spfileDEMO100.ora' from autobackup ;
Starting restore at 17-NOV-13
using channel ORA_DISK_1

recovery area destination: /u/DEMO/FRA
database name (or database unique name) used for search: DEMO100
channel ORA_DISK_1: AUTOBACKUP /u/DEMO/FRA/DEMO100/autobackup/2013_11_17/o1_mf_s_831765902_98lcw1g4_.bkp found in the recovery area
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20131117
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u/DEMO/FRA/DEMO100/autobackup/2013_11_17/o1_mf_s_831765902_98lcw1g4_.bkp
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 17-NOV-13

Il n’y a plus qu’à le mettre à sa place:

+ cp /tmp/spfileDEMO100.ora /app/oracle/product/12c/dbs

aucun arrêt n’a été nécessaire

Si on n’avait pas pu restaurer le spfile, il est toujours possible de retrouver les paramètres:
– dans l’alert.log: ils sont écrits à chaque démarrage
– avec un ‘create pfile … from memory’ pour récupérer tous les paramètres courants (>= 11g)
– à partir d’un backup, tant qu’on sait où est le backup (le controlfile et/ou le repository rman le savent)

Laisser un commentaire