Rubriques Unix et Oracle
Accueil du siteOracleadministrationSauvegarde / restauration
Restaurer une base de données Oracle avec RMAN
mercredi 2 mars 2005
par Laurent
popularité : 93%

Liens en relations

- Fonctionnement et configuration de RMAN
- Sauvegarder une base de données Oracle avec RMAN
- Astuces supplémentaires

Restaurer la base de données

Restauration complète

La restauration complète d’une base de données s’effectue de la manière suivante :


RMAN> STARTUP FORCE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

Notons de suite que pour effectuer cette opération la base doit être en mode MOUNT (montée).

NB : l’option FORCE va réaliser la combinaison SHUTDOWN ABORT / STARTUP. Attention donc à son utilisation, ici elle est donnée à titre d’exemple pour être sur que la base est arrêtée.

Restauration incomplète

Généralement, ce type de restauration s’effectue dans les cas suivants :

- Un ou tous les redo-log en lignes ont été détruits.
- Une perte de données : un utilisateur qui a réalisé un DROP TABLE (par exemple) et on ne dispose pas d’un export assez récent.
- Impossibilité d’effectuer une restauration complète par absence d’un ou de plusieurs fichier de logs archivés.
- Il y a eu perte du fichier de contrôle courant et on doit utiliser un fichier de contrôle de sauvegarde pour ouvrir la base.

La restauration incomplète se fera en mode point-in-time. Dans ce cas, on doit savoir exactement à quelle date était le dernier état stable de la base et savoir également que tout type de sauvegarde de ce type entraînera une perte de données :

Pour se faire, il faudra donc exécuter les commandes suivantes :


RMAN> RUN {
2> SET UNTIL TIME = ‘2000-12-09 11:44:00';
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> ALTER DATABASE OPEN RESETLOGS;
}

Notons que le format de date doit correspondre aux variables d’environnement systèmes NLS_LANG et surtout NLS_DATE_FORMAT.

Un tablespace

La restauration d’un tablespace peut se faire en ligne, avec les commandes suivantes :


RMAN> RUN {
2> SQL 'ALTER TABLESPACE users OFFLINE';
3> RECOVER TABLESPACE users;
4> SQL 'ALTER TABLESPACE users ONLINE';
}

Dans un tel cas, les fichiers seront restaurés au même endroit que le précédent. Si on veut modifier cette donnée, il suffit d’exécuter les commandes suivantes (répéter la ligne 2 en fonction du nombre de fichiers contenus par le tablespace) :


RMAN> SQL 'ALTER TABLESPACE users OFFLINE';
RMAN> SET NEWNAME FOR DATAFILE 8 TO '/nouveau_rep/mon_nouveau_nomDeFichier.dbf';
RMAN> RESTORE TABLESPACE users;
RMAN> SWITCH DATAFILE ALL;
RMAN> RECOVER TABLESPACE users;
RMAN> SQL 'ALTER TABLESPACE users ONLINE';

Un fichier de données

RMAN nous offre la possibilité de restaurer un fichier de données. Cette opération est similaire à la restauration d’un tablespace. L’obtention de l’identifiant du fichier se fait par la requête SQL suivante :


SQL> SELECT tablespace_name,file_id,file_name
 2  FROM   dba_data_files
 3  /

TABLESPACE_NAME FILE_ID FILE_NAME
--------------- ------- ------------------------
SYSTEM                1 /u02/mgmt/system01.dbf
UNDOTBS1              2 /u02/mgmt/undotbs01.dbf
CWMLITE               3 /u02/mgmt/cwmlite01.dbf
DRSYS                 4 /u02/mgmt/drsys01.dbf
EXAMPLE               5 /u02/mgmt/example01.dbf
INDX                  6 /u02/mgmt/indx01.dbf
ODM                   7 /u02/mgmt/odm01.dbf
TOOLS                 8 /u02/mgmt/tools01.dbf
USERS                 9 /u02/mgmt/users01.dbf
XDB                  10 /u02/mgmt/xdb01.dbf
RMAN_TS              11 /u02/mgmt/rman_ts01.dbf

11 ligne(s) sélectionnée(s).

La restauration du fichier 9 à l’endroit indiqué par cette requête se fera par les commandes suivantes :


RMAN> SQL 'ALTER DATABASE DATAFILE 9 OFFLINE';
RMAN> RESTORE DATAFILE 9;
RMAN> RECOVER DATAFILE 9;
RMAN> SQL 'ALTER DATABASE DATAFILE 9 ONLINE';

Si on avait voulu restaurer le fichier à l’endroit suivant /u03/restore, nous aurions du exécuter les commandes suivantes :


RMAN> SQL 'ALTER DATABASE DATAFILE 9 OFFLINE';
RMAN> SET NEWNAME FOR DATAFILE 9 TO '/u03/restore/users01.dbf';
RMAN> RESTORE DATAFILE 9;
RMAN> SWITCH DATAFILE ALL;
RMAN> RECOVER DATAFILE 9;
RMAN> SQL 'ALTER DATABASE DATAFILE 9 ONLINE';

NB : Attention a la validité du fichier (si l’entête du fichier de contrôle courant correspond aux fichiers à restaurer, alors aucune restauration ne sera effectuée).

Un bloc de données

RMAN offre la possibilité de réparer un bloc de données corrompu. Ce genre d’information est généralement remonté dans les fichiers d’alert, les fichiers de trace ou dans des requêtes SQL.

Par exemple, si je me rend compte que les bloc d’id 123,124 et 7041 du fichier de données 9 sont corrompus je peux les restaurer par la commande :


RMAN> BLOCKRECOVER DATAFILE 9 BLOCK 123,124,7041

Un fichier de contrôle

Dans un monde rêvé et surtout bien pensé ! On ne restaure pas les fichiers de contrôle, car ils sont soit multiplexés ou alors on a conservé un script de création généré par la commande


SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Si on se retrouve dans un cas de force majeure et que l’on doit restaurer le fichier de contrôle qui a été sauvegardé, on peut le faire avec les commandes suivantes :


SQL> -- Connexion à la base cible en SQL*PLUS (mgmt)
SQL> CONNECT / AS SYSDBA
SQL> STARTUP NOMOUNT;
Connexion au catalog et a la base cible
$ rman catalog sys/XXX@ORCL
RMAN> CONNECT TARGET SYS/XXX@MGMT;
RMAN> RESTORE CONTROLFILE;
RMAN> ALTER DATABASE MOUNT;
RMAN> ALTER DATABASE OPEN;

Si toutefois une erreur de ce type survenait :


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/28/2004 10:31:52
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

Cela signifierait l’obligation de faire un recover de la base (incohérence entre les en-têtes de fichiers de données avec celui de contrôle), histoire de remettre le fichier de contrôle en cohérence avec les fichiers de données.


SQL> -- Connexion à la base cible en SQL*PLUS (mgmt)
SQL> CONNECT / AS SYSDBA
SQL> shutdown abort;
SQL> startup mount;
Connexion au catalog et a la base cible
$ rman catalog sys/XXX@ORCL
RMAN> CONNECT TARGET SYS/XXX@MGMT;
RMAN> recover database;
RMAN> alter database open resetlogs;

Le contenu des Redo-logs courant sera alors perdu.

EFFECTUER IMMEDIATEMENT UNE SAUVEGARDE COMPLETE DE LA BASE APRES UNE TELLE OPERATION.

Un fichier de journal de transaction : un redo-log

Dans ce scénario, nous allons considérer que nous disposons des fichiers de contrôle sauvegardés ainsi que de jeux de sauvegardes complets réalisés avec la commande « BACKUP DATABASE PLUS ARCHIVELOG ». Ce scénario se pose lorsque tout un groupe de REDO LOG courant a été perdu .

Si un seul membre du groupe a disparu, les logs d’alertes vont être passablement plus bavards. Alors passer le groupe en mode INACTIVE (à coup d’ALTER SYSTEM SWITCH LOGFILE) et recréer le membre manquant. Multipléxer les membres d’un groupes de REDO est toujours bien utile.

Les commandes pour remettre la base en état sont les suivantes :

Tout d’abord fermons la base cible si ce n’est pas déjà fait.


SQL> CONNECT / AS SYSDBA
SQL> SHUTDOWN ABORT;
SQL> STARTUP NOMOUNT;

Se connecter au catalogue et à la base cible :


$ rman catalog sys/XXX@ORCL
RMAN> CONNECT TARGET SYS/XXX@MGMT;
RMAN> RESTORE CONTROLFILE;
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE;
RMAM> RECOVER DATABASE;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/28/2004 11:03:23
RMAN-06054: media recovery requesting unknown log: thread 1 seq 1 lowscn 8448414

Si les redo-log courant ont été perdus une restauration complète sera impossible (d’où le message d’erreur ci-dessus). Il faudra donc compléter par la commande suivante :


RMAN> ALTER DATABASE OPEN RESETLOGS;

EFFECTUER IMMEDIATEMENT UNE SAUVEGARDE COMPLETE DE LA BASE APRES UNE TELLE OPERATION.

La suite....

 
Messages de forum :
Restaurer une base de données Oracle avec RMAN
mardi 23 septembre 2008

Salutations,

Il fallait lire ALTER DATABASE BACKUP CONTROLFILE TO TRACE ; au lieu de ALTER SYSTEM BACKUP CONTROLFILE TO TRACE ;

Cdt,



    Restaurer une base de données Oracle avec RMAN
    mardi 23 septembre 2008
    par  Laurent
    Évidemment !!! je n’avais pas remarqué cette erreur. Merci !