My Oracle blog

Bonjour,

Dans un post précédent (le premier en fait)  http://www.lao-dba.com/categorie-10596128.html
j'avais expliqué comment dupliquer une base qui était en mode Archivelog sur la même machine.
Pour répondre à une des questions sur ce post, je vais aujourd'hui effectuer la même opération (le clonage) mais avec deux différences:
  • La base à cloner n'est pas en mode Archivelog.
  • La base de destination se trouver sur une machine distante.

Pour effectuer ces manipulations, j'utilise deux machines virtuelles (XP PRO).
La base à cloner est la base que nous avons créer dans le dernier post (
http://www.lao-dba.com/article-27313199.html).

Cependant, nous allons ajouter deux lignes au fichier ini.ora pour indiquer l'emplacement de la sauvegarde, et la taille maximum reservé a cet emplacement (à modifier en fonction de votre environnement).


DB_RECOVERY_FILE_DEST_SIZE=10G
DB_RECOVERY_FILE_DEST="e:\oracle\product\10.2.0\backup"


Il faut également créer un listener sur la machine virtuelle afin de pouvoir s'y connecter par la suite depuis le serveur distant.

Nous allons maintenant effectuer une sauvegarde (en utilisant RMAN) de notre base, qui je rappelle n'est pas en mode archivelog. Ce qui signigie que la sauvegarde s'effectue base fermée, et plus précisemment en mode MOUNT.


SET ORACLE_SID=DB1

SQLPLUS /nolog
CONNECT / as sysdba
SHUTDOWN IMMEDIATE; 

RMAN target /
STARTUP MOUNT pfile='e:\oracle\product\10.2.0\admin\db1\pfile\init.ora';
BACKUP FULL DATABASE;
ALTER DATABASE OPEN;
QUIT;


La sauvegarde est maintenant terminée.

Nous pouvons passer sur le serveur distant qui pour le moment ne contient que le noyau Oracle (10.2.0.3) 

Il faut (comme pour une création de base manuelle) créer les répertoire nécessaires.
Je décide que la base de destination (ainsi que l'instance ) se nommera DB2 (Oracle, DB2==> humour !)

MKDIR E:\oracle\product\10.2.0\admin
MKDIR E:\oracle\product\
10.2.0\oradata 

MKDIR E:\oracle\product\10.2.0\admin\DB2
MKDIR E:\oracle\product\
10.2.0\oradata\DB2 

MKDIR E:\oracle\product\10.2.0\admin\DB2\bdump
MKDIR E:\oracle\product\
10.2.0\admin\DB2\cdump
MKDIR E:\oracle\product\
10.2.0\admin\DB2\pfile
MKDIR E:\oracle\product\
10.2.0\admin\DB2\udump 

Il faut maintenant copier le fichier init.ora depuis le serveur d'origine sur le serveur de destination à l'emplacement prévu(E:\Oracle\product\10.2.0\admin\db2\pfile)

En plus de modifier le init.ora pour remplacer tous les DB1 par DB2, nous allons également ajouter les deux lignes suivantes à la fin du fichier. 

DB_FILE_NAME_CONVERT=('DB1','DB2')
INSTANCE_NAME='DB2

 

Crééons maintenant l'instance: (Etape propre à windows)


oradim -new -sid DB2

 

Avant de pouvoir commencer l'étape de clonage proprement dite, il faut récuperer le fichier de sauvegarde de DB1 et le copier sur mon serveur distant en prenant soit de conserver l'arboresence et les noms de fichiers.Il suffit donc de copier tout ce qui se trouve dans E:\oracle\product\backup (sur mon serveur d'origine)  vers E:\oracle\product\backup (sur mon serveur distant).

Remarque : Si je dispose d'un espace de stockage commun accessible par les deux serveurs, alors cette opération n'est pas nécessaire. 
 
Il ne reste plus qu'a ajouter les lignes suivantes dans le tnsnames.ora du serveur distant


DB1_SRV1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB1)
    )
  )

 
Clonage de la base:

SET ORACLE_SID=DB2
SQLPLUS / nolog
CONNECT / as sysdba
STARTUP NOMOUNT pfile='e:\oracle\product\10.2.0\admin\db2\pfile\init.ora';
DISCONNECT;
QUIT

RMAN target sys/*****@DB1_SRV1 auxiliary /
DUPLICATE TARGET DATABASE TO DB2
pfile='e:\oracle\product\10.2.0\admin\db2\pfile\init.ora'
logfile 
'e:\oracle\product\
10.2.0\oradata\DB2\redo01.dbf' size 50m,
'e:\oracle\product\
10.2.0\oradata\DB2\redo02.dbf' size 50m,
'e:\oracle\product\
10.2.0\oradata\DB2\redo03.dbf' size 50m;  

Et normalement, vous disposez maintenant d'une copie de la base DB1...

Remarque : Pour simplifier, j'ai conservé les mêmes noms et emplacement sur le machine de destination, mais la commande DUPLICATE permet de renommer les fichiers et d'indiquer un nouvel emplacement. On en reparlera un jour si ca interesse quelqu'un...

LAO. 

 

Ven 30 jan 2009 2 commentaires
Justement, j'avais besoin d'une copie d'une base... Tu arrives à pic !
Virginie - le 02/02/2009 à 11h10
Mon surnom est "Colt Sivers"... Je suis l'homme qui tombe à pic... Plus sérieusement, ne confonds pas clonage d'une base, avec un export / import d'un schema. Mais tu as l'homme qu'il te faut en interne...

LAO.
LAO
Oui, on a aussi l'homme qui tombe à pic (ou presque) en interne :D Le pauvre est un peu le sauveur de tous, il n'est donc pas toujours très disponible. J'espère qu'il résistera bien à tous nos défauts ;)
Virginie - le 02/02/2009 à 15h51