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.