Sauvegarde à froid avec RMAN, pas si simple !
[ Dernière mise à jour : 20/04/2011 ]
Mon problème ici se situe au niveau de la sauvegarde à froid avec RMAN mais surtout de la restauration !
Le processus d’archivelog n’est pas activé pour cette instance, c’est pourquoi il a été convenu de faire un backup à froid via RMAN.
Il n’y a pas de catalogue RMAN, les informations sont stockées dans les fichiers de contrôle. Il n’y a pas non plus d’autobackup des fichiers de contrôle.
Le script rman permettant de réaliser la sauvegarde est le suivant :
run
{
shutdown immediate;
startup mount;
allocate Channel C1 type disk FORMAT '/opt/oracle/admin/backup/ora_df%t_s%s_s%p';
allocate Channel C2 type disk FORMAT '/opt/oracle/admin/backup/ora_df%t_s%s_s%p';
allocate Channel C3 type disk FORMAT '/opt/oracle/admin/backup/ora_df%t_s%s_s%p';
allocate Channel C4 type disk FORMAT '/opt/oracle/admin/backup/ora_df%t_s%s_s%p';
backup
format '/opt/oracle/admin/backup/dly_%d_%s_%p_%T_%t_dbf'
tag 'Daily_Full_db_Backup_<ID_UNIQUE>'
(database include current controlfile) ;
crosscheck backup;
DELETE expired backup;
shutdown immediate;
startup;
}
J’usqu’ici, tout va bien, la sauvegarde ne pose pas de problème, passons à la restauration.
Dans un premier temps, je vais simplement faire une restauration du dernier backup.
Etape unique : Restauration du dernier backup :
Les ordres suivants sont à passer dans rman :
- startup nomount force;
- set DBID [DBID de votre instance]
- run {
alter database mount;
restore database;
}
Puis, dans sqlplus :
- recover database until cancel;
- Puis taper CANCEL, il n’y a pas d’archivelog je vous le rappelle !
- alter database open resetlogs;
La restauration se passe normalement sans problème à ce niveau.
Je refais donc un nouveau jeu de 2 backups consécutifs, entre les deux, je mets à jour une table pour vérifier si la restauration est ok.
Le but à présent est de restaurer l’avant dernier backup puis le dernier backup. Et c’est là que les choses se compliquent.
Etape 1 : Restauration de l’avant dernier backup :
Je passe les ordres suivants dans rman :
- startup nomount force;
- set DBID [DBID de votre instance]
- run {
alter database mount;
SET UNTIL SCN = [SCN de l'avant dernier backup]
restore database;
}
Puis, dans sqlplus :
- recover database until cancel;
- Puis taper CANCEL, il n’y a pas d’archivelog je vous le rappelle !
- alter database open resetlogs;
C’est maintenant que les choses se compliquent, la restauration de l’avant dernier backup est ok, je veux à présent restaurer le dernier backup.
Etape 2 : Restauration du dernier backup :
Ici se pose un problème, mes fichiers de contrôle ont été restaurés à l’étape précédente, il ne contiennent donc plus les informations de la dernière sauvegarde.
Les étapes de restautation dans ce cas particulier sont donc les suivantes dans rman :
- startup nomount force;
- Restauration du spfile depuis le backup (optionnel, à faire seulement si ce fichier a été perdu) : RESTORE SPFILE FROM ‘<bck_spfile>’;
- Restauration des derniers fichiers de contrôle : RESTORE CONTROLFILE FROM ‘<bck_ctrl_files>’ ;
- alter database mount;
- Restauration du dernier backup : restore database from TAG=’<TAG_NAME>’ ou restore database until SCN=<SCN_NUMBER>
- recover database noredo;
- alter database open resetlogs;
N’hésitez pas à partager votre expérience sur le sujet dans les commentaires pour faire évoluer cet article.
![MySQL[Plus]](http://www.mysqlplus.fr/wp-content/uploads/2013/01/plus_logo_fr_mini.png)



