Cette procédure se base sur le fait que la BD est restaurée sur le serveur initial. Il faut donc l'adapter selon le besoin.
Si la base de données du catalogue n’est plus accessible et que l’on veut la restaurer à partir d’un backup RMAN, il faut connaître son DBID.
1. DÉTERMINER LE DBID DE LA BD À RESTAURER
Pour déterminer le DBID de la base de données à restaurer:
- Il faut voir le contenu des fichiers log de backup.
- Le DBID est donné par le format '%F' du controlfile autobackup.
Dans mon cas, le fichier de backup créé par le «controlfile autobackup» est sous le format «ctl_SID_c-DBID_date» (voir article concernant le backup).
2. S’ASSURER QUE L’INSTANCE ASM EST DÉMARRÉE
Dans une session putty :
ps –ef | grep pmon | grep ASM
3. LANCER RMAN ET POSITIONNER LE DBID
Étant dans l’environnement de la BD du catalogue:
echo $ORACLE_SID -- Le résultat doit être l'instance du catalogue à restaurer
rman target / nocatalog
RMAN> set dbid <DBID>
Note:
Il s’agit du DBID retrouvé à l’étape 1.
4. DÉMARRER UNE INSTANCE FICTIVE
Étant connecté à RMAN et le DBID positionné (session RMAN précédente), démarrer une instance fictive.
RMAN> startup force nomount
Note :
Ce «startup» se fait sans le vrai spfile.
rman utilisera un spfile par défaut pour démarrer une instance dans le but de restaurer le backup du spfile pris en backup avec le «controlfile autobackup»
Noter que cette étape créera une arborescence DB_UNKNOWN dans ASM (avec ASMCMD, vous verrez une arborescence DB_UNKNOWN au niveau des diskgroups).
5. RESTAURER LE SPFILE
Étant connecté à RMAN et le DBID positionné (session RMAN précédente), restaurer le spfile pris en backup avec le «controlfile autobackup» :
-- J'utilise le type SBT_TAPE car mon backup a été fait sur TAPE.
run {
allocate channel ch00 type 'SBT_TAPE';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ctl_%d_%F.back';
send 'NB_ORA_SERV=pellan, NB_ORA_POLICY=_RMAN_CAT11GR2, NB_ORA_CLIENT=udl001';
restore spfile from autobackup db_name='CAT11GR2';
shutdown immediate;
release channel ch00;
}
Note :
Les éléments en rouge sont à adapter. Selon votre cas, vous n'aurez certainement pas besoin de tous ces éléments. Le format du «controlfile autobackup» est celui qui a été utilisé pour faire le backup.
Sortir de la session RMAN.
RMAN> exit;
6. DÉMARRER L’INSTANCE AVEC LE SPFILE RESTAURÉ
Étant dans l’environnement de la BD du catalogue:
echo $ORACLE_SID -- Le résultat doit être l'instance du catalogue à restaurer
sqlplus / as sysdba
SQL> startup nomount;
7. ENLEVER LA VALEUR DU PARAMETRE «DB_CREATE_FILE_DEST» ET REDEMARRER L’INSTANCE
Note :
Enlever la valeur du paramètre «db_create_file_dest» sinon tous les fichiers de données seront restaurés à l'emplacement donné par la valeur de ce paramètre.
Étant dans la session SQLPLUS précédente, modifier la valeur du paramètre «db_create_file_dest» et redémarrer l’instance comme suit:
Faire un «show parameter» et prendre en copie la valeur actuelle :
SQL> show parameter db_create_file_dest;
Modifier la valeur et redémarrer l’instance:
alter system reset db_create_file_dest scope=spfile;
shutdown immediate;
startup nomount;
8. LANCER RMAN ET POSITIONNER LE DBID
Étant dans l’environnement de la BD du catalogue:
echo $ORACLE_SID -- Le résultat doit être l'instance du catalogue à restaurer
rman target / nocatalog
RMAN> set dbid <DBID>
Note:
Il s’agit du DBID retrouvé à l’étape 1.
9. RESTAURER LA BD
Étant connecté à RMAN et le DBID positionné (session RMAN précédente), restaurer la bd:
run {
allocate channel ch00 type 'SBT_TAPE';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ctl_%d_%F.back';
send 'NB_ORA_SERV=pellan, NB_ORA_POLICY=_RMAN_CAT11GR2, NB_ORA_CLIENT=udl001';
restore controlfile from autobackup db_name='CAT11GR2';
ALTER DATABASE MOUNT;
allocate channel ch01 type 'SBT_TAPE';
allocate channel ch02 type 'SBT_TAPE';
restore database; -- Mettre des options en fonction du point jusqu'auquel l'on veut restaurer
recover database; -- Mettre des options en fonction du point jusqu'auquel l'on veut restaurer
release channel ch00;
release channel ch01;
release channel ch02;
}
Note :
Les éléments en rouge sont à adapter. Selon votre cas, vous n'aurez certainement pas besoin de tous ces éléments. Le format du «controlfile autobackup» est celui qui a été utilisé pour faire le backup.
10. OUVRIR LA BD AVEC «RESETLOGS» PUIS L’ARRÊTER
Étant connecté à RMAN et le DBID positionné (session RMAN précédente), ouvrir la bd puis l’arrêter :
RMAN> alter database open resetlogs;
RMAN> shutdown immediate;
Sortir de la session RMAN.
RMAN> exit;
11. DÉMARRER LA BD AVEC SRVCTL
Si vous utilisez Oracle Restart, démarrer la BD avec la commande srvctl.
Étant dans l’environnement de la BD du catalogue:
echo $ORACLE_SID -- Le résultat doit être l'instance du catalogue restaurée
srvctl start database -d $ORACLE_SID
Si la BD n'est pas déjà enregistrée auprès d'oracle restart, il faut d'abord l'enregistrer:
srvctl add database -d $ORACLE_SID -o $ORACLE_HOME -n $ORACLE_SID -p '+SYSDG01/CAT11GR2/spfileCAT11GR2.ora' -s open -t immediate
12. REMETTRE LE PARAMÈTRE «DB_CREATE_FILE_DEST»
Étant dans le bon environnement:
echo $ORACLE_SID -- Le résultat doit être l'instance du catalogue à restaurée
sqlplus / as sysdba
SQL> alter system set db_create_file_dest='+DISKGROUP' scope=both;
SQL> exit;
Note :
Remplacer «DISKGROUP» par la valeur prise en copie au point 7.
13. RECRER LE TABLESPACE TEMPORAIRE
Il se peut qu'à la fin du RESTORE le « tempfile » indique le diskgroup mais pas le fichier (à valider).
Pour vérifier :
sqlplus / as sysdba
SQL> select file#, status, name from v$tempfile;
FILE# STATUS NAME
1 ONLINE +SYSDG01
On doit donc recréer complètement le tablespace « temp ». Ne pas oublier de spécifier la taille du tablespace temporaire.
sqlplus / as sysdba
SQL> CREATE TEMPORARY TABLESPACE TEMP01 TEMPFILE '+SYSDG01' AUTOEXTEND ON NEXT 100M MAXSIZE 3500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP01 ;
SQL> DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES ;
SQL> ALTER TABLESPACE TEMP01 RENAME TO TEMP ;
SQL> SELECT * FROM DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
sql> select file#, status, name from v$tempfile;
sql> exit;
Hope it helps....
Bonjour Herve Etche, je suis Eric Koffi, ivoirien et je souhaite avoir ton contact mail si possible.
RépondreSupprimerje souhaite restaurer une base 10GR2 en ASM sur une DB 10G R2 sur un autre serveur mais utilisant pas ASM
Salut,
RépondreSupprimerMerci d'utiliser le blog.
Tu peux me joindre par hetche@herve-etche.com
Bonne journee.