vendredi 17 septembre 2010

Comment restaurer le catalogue RMAN (sous ASM) pris en backup par RMAN (sans catalogue)?

Cet article est la suite de celui concernant la sauvegarde d'un catalogue RMAN (sous ASM). Il s'agit ici de restaurer la BD (sous ASM) qui avait été prise en backup par RMAN (sans catalogue). La version utilisée est 11.2.0.1

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....

2 commentaires:

  1. Bonjour Herve Etche, je suis Eric Koffi, ivoirien et je souhaite avoir ton contact mail si possible.
    je souhaite restaurer une base 10GR2 en ASM sur une DB 10G R2 sur un autre serveur mais utilisant pas ASM

    RépondreSupprimer
  2. Salut,

    Merci d'utiliser le blog.
    Tu peux me joindre par hetche@herve-etche.com

    Bonne journee.

    RépondreSupprimer