Récupération (RMAN)
| Fiche express | |
|---|---|
| Domaine | Restauration et récupération Oracle |
| Commandes | RESTORE, RECOVER
|
| Modes base | ARCHIVELOG / NOARCHIVELOG |
| Voir aussi | RMAN · Data Recovery Advisor (RMAN) · Sauvegarde (RMAN) |
La stratégie de récupération d'une base Oracle dépend de deux facteurs : la nature du fichier perdu (données, contrôle, paramètres serveur, journalisation) et le mode de fonctionnement de la base (ARCHIVELOG ou NOARCHIVELOG).
Le Data Recovery Advisor peut automatiser une partie de ce diagnostic.
- La restauration (restore) consiste à extraire d'une sauvegarde les fichiers nécessaires.
- La récupération (recover) consiste à appliquer les fichiers de journalisation aux fichiers restaurés depuis la sauvegarde.
Mode NOARCHIVELOG
Dans ce mode, une seule méthode est possible : restauration complète de la base puis redémarrage.
Si les fichiers de journalisation en ligne n'ont pas effectué une rotation complète depuis la dernière sauvegarde, il est possible de récupérer toutes les données :
CONNECT / AS SYSDBA
STARTUP MOUNT
Mettre les fichiers concernés en OFFLINE :
ALTER DATABASE DATAFILE '/oradata/DATABASE_NAME/indx01.dbf' OFFLINE DROP ;
ALTER DATABASE OPEN ;
DROP TABLESPACE indx ;
CREATE TABLESPACE indx ... ;
CREATE INDEX ... ;
Mode ARCHIVELOG
Mode opératoire général : restaurer la dernière sauvegarde, appliquer les fichiers de journalisation, redémarrer la base.
Gravité des incidents
Peu grave (tant qu'il reste un exemplaire) :
- perte de fichiers de contrôle, à condition qu'il en reste au moins un ;
- perte de fichiers de journalisation, à condition qu'il en reste au moins un par groupe.
Grave :
- perte de tous les fichiers de contrôle ;
- perte de tous les membres d'un groupe de fichiers de journalisation.
Identifier la nature du problème
Erreur de fichier de contrôle — l'instance reste en NOMOUNT :
ORA-00204 -- indique qu'au moins un fichier de contrôle pose problème
Erreur de fichier de journalisation — l'instance reste en MOUNT, consulter le processus LGWR :
ORA-00313 -- échec d'ouverture des membres du groupe de journaux
ORA-00312 -- journal en ligne n, thread p : fichier
Erreur concernant les fichiers de données — l'instance reste en MOUNT, consulter le fichier de trace DBWR :
ORA-01157 -- impossible d'identifier ou de verrouiller le fichier
ORA-01110 -- fichier de données n : fichier
SELECT file#, error, online_status FROM v$recover_file ;
VALIDATE DATABASE ;
Commandes RMAN
{RESTORE | RECOVER} cible [options] ;
RESTORE — cibles possibles :
DATABASE
DATAFILE liste_numéros_ou_noms
TABLESPACE liste_noms
CONTROLFILE [TO 'destination'] [FROM AUTOBACKUP | 'sauvegarde']
SPFILE [TO 'destination'] [FROM AUTOBACKUP | 'sauvegarde']
ARCHIVELOG {ALL | filtre_archive}
Filtres d'archives et options :
FROM_TIME 'date'
UNTIL TIME 'date'
TIME BETWEEN 'date1' AND 'date2'
PREVIEW [SUMMARY]
VALIDATE
RECOVER — cibles et options :
DATABASE
DATAFILE liste_numéros_ou_noms
TABLESPACE liste_noms
DELETE ARCHIVELOG [MAXSIZE taille [K|M|G]]
SET ARCHIVELOG DESTINATION
Scénarios courants
- Récupération du fichier de paramètres.
- Récupération du fichier de contrôle.
- Récupération d'un fichier de journalisation.
- Récupération complète de toute la base en ARCHIVELOG.
- Récupération partielle de la base en ARCHIVELOG.
- Récupération de tous les fichiers de contrôle en ARCHIVELOG.
- Récupération incomplète en mode NOARCHIVELOG.
- Récupération vers un emplacement différent.
- Tablespace temporaire géré localement.
Processus type le plus fréquent : récupération du fichier de contrôle, puis récupération complète d'une partie de la base.
Récupération du fichier de paramètres serveur (spfile)
Deux méthodes : récupérer le fichier texte, ou restaurer via RMAN depuis la FRA.
RMAN> STARTUP NOMOUNT
-- échec attendu si le spfile est manquant
RMAN> RESTORE SPFILE FROM AUTOBACKUP
DB_RECOVERY_FILE_DEST 'chemin_fra'
DB_NAME 'DATABASE_NAME' ;
RMAN> SHUTDOWN
RMAN> STARTUP
Si le fichier n'est pas dans la FRA :
SET DBID ...
SET CONTROLFILE AUTOBACKUP FORMAT ...
RESTORE SPFILE FROM AUTOBACKUP ;
-- ou
RESTORE SPFILE FROM 'sauvegarde' ;
Récupération d'un fichier de contrôle
S'il en reste au moins un fichier valide, il suffit de le dupliquer (ne pas faire de restauration complète) :
- identifier le fichier de contrôle endommagé via le fichier d'alerte de l'instance ;
- dupliquer le fichier valide ;
- redémarrer.
STARTUP NOMOUNT
ALTER SYSTEM SET CONTROL_FILES = '/oradata/DATABASE_NAME/control01.ctl', '/oradata/DATABASE_NAME/control02.ctl' SCOPE=SPFILE ;
SHUTDOWN IMMEDIATE ;
STARTUP
RESTORE CONTROLFILE FROM '/oradata/DATABASE_NAME/control01.ctl' ;
Récupération d'un fichier de journalisation
S'il reste un membre valide dans le groupe, il suffit de dupliquer ce fichier :
- identifier le fichier de journalisation endommagé via le fichier d'alerte de l'instance (LGWR) ou
V$LOGFILE; - supprimer le membre endommagé, puis en ajouter un nouveau :
ALTER DATABASE DROP LOGFILE MEMBER 'nom_fichier' ;
ALTER DATABASE ADD LOGFILE MEMBER 'nom_fichier' TO GROUP numéro ;
Réitérer pour tous les fichiers endommagés (colonne STATUS/INVALID de V$LOGFILE).
Si le fichier appartient au groupe courant :
ALTER SYSTEM SWITCH LOGFILE ;
Récupération complète de toute la base (ARCHIVELOG)
RMAN> STARTUP MOUNT
RMAN> RESTORE DATABASE ;
RMAN> RECOVER DATABASE ;
RMAN> ALTER DATABASE OPEN ;
Récupération complète d'une partie de la base (ARCHIVELOG)
- Si le fichier de données contient SYSTEM ou un fichier d'annulation (undo) actif, l'instance doit être arrêtée : il n'est pas possible de restaurer ce fichier base ouverte.
- Pour tout autre fichier de données, la base peut rester ouverte — mais si elle est fermée, elle ne pourra pas être rouverte tant que le fichier n'est pas restauré.
Base fermée :
RMAN> STARTUP MOUNT
RMAN> RESTORE TABLESPACE system ;
RMAN> ALTER DATABASE OPEN ;
Base ouverte :
RMAN> SQL "ALTER DATABASE DATAFILE 6 ONLINE" ;
RMAN> ALTER DATABASE OPEN ;
RMAN> SQL "ALTER TABLESPACE indx OFFLINE IMMEDIATE" ;
RMAN> RESTORE DATAFILE 6 ;
RMAN> RECOVER DATAFILE 6 ;
RMAN> SQL "ALTER TABLESPACE indx ONLINE" ;
Récupération de tous les fichiers de contrôle (ARCHIVELOG)
Cas où tous les fichiers de contrôle sont perdus, ainsi qu'un fichier de données :
RMAN> STARTUP MOUNT
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP ;
RMAN> ALTER DATABASE MOUNT ;
RMAN> RESTORE DATAFILE 5 ;
RMAN> RECOVER DATABASE ;
RMAN> ALTER DATABASE OPEN RESETLOGS ;
RMAN> LIST INCARNATION OF DATABASE ;
Si le fichier de contrôle n'est pas dans la FRA :
SET DBID ...
SET CONTROLFILE AUTOBACKUP FORMAT ...
RESTORE CONTROLFILE FROM AUTOBACKUP ;
Vérifier ensuite V$DATABASE.INCARNATION#.
Récupération incomplète (ARCHIVELOG)
Cas où tout est perdu (fichier de paramètres, de contrôle, de données et de journalisation) :
- identifier le point de restauration cible (SCN ou numéro de séquence du fichier de journalisation) ;
- ouvrir la base avec l'option RESETLOGS (nouvelle incarnation de la base).
RMAN> STARTUP NOMOUNT
-- échec attendu
RMAN> RESTORE SPFILE FROM AUTOBACKUP
DB_RECOVERY_FILE_DEST 'chemin_fra'
DB_NAME 'DATABASE_NAME' ;
RMAN> STARTUP NOMOUNT FORCE
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP ;
RMAN> ALTER DATABASE MOUNT ;
RMAN> RESTORE DATABASE ;
RMAN> RECOVER DATABASE ;
-- en cas d'échec, vérifier le SCN cible puis :
RMAN> ALTER DATABASE OPEN RESETLOGS ;
Options de ciblage du SCN :
UNTIL SCN [=] n
UNTIL SEQUENCE [=] n
UNTIL TIME [=] 'date'
Récupération en mode NOARCHIVELOG
Cas où tout est perdu :
RMAN> STARTUP NOMOUNT
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP ;
RMAN> ALTER DATABASE MOUNT ;
RMAN> RESTORE DATABASE ;
-- avec une sauvegarde incrémentale cohérente :
RMAN> RECOVER DATABASE NOREDO ;
RMAN> ALTER DATABASE OPEN RESETLOGS ;
Récupération vers un emplacement différent
Avant la restauration :
SET NEWNAME FOR DATAFILE 'ancien_chemin' | numéro_fichier TO 'nouveau_chemin' ;
Après la restauration et avant le recover :
SWITCH DATAFILE ALL ;
Tablespace temporaire géré localement
Oracle le recrée automatiquement (voir V$TEMPFILE, REPORT SCHEMA) :
ALTER TABLESPACE temp ADD TEMPFILE '/oradata/DATABASE_NAME/temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 1G ;
Voir aussi
- RMAN — présentation générale
- Data Recovery Advisor (RMAN) — diagnostic assisté avant de choisir la stratégie de récupération
- Sauvegarde (RMAN) — commandes de sauvegarde utilisées comme source de restauration
- Référentiel (RMAN) — retrouver les sauvegardes disponibles avant de restaurer