Très souvent, vous aurez besoin de dupliquer une base existante et ce pour diverses raisons : création d’environnements différents (Production, Pré-production, Développement, etc…), création d’une base identique pour effectuer vos tests, base de Standby sur laquelle vous êtes prêt à basculer, etc…
Vous avez la solution du dump, export sur la source, import sur la cible, mais vous vous rendrez compte très rapidement que dès que l’on a des volumétrie assez conséquente, cette solution n’est plus du tout adaptée (charge, durée, etc…).
Mais soyez rassurés, Oracle pense à nous. L’outil de sauvegarde Recovery Manager, RMAN, vous propose une fonctionnalité particulièrement intéressante : DUPLICATE.
Chacun son chemin
La commande DUPLICATE de l’outil RMAN peut s’utiliser de deux façons principales :
- La première méthode consiste à effectuer une sauvegarde de la base source, de la transférer sur le serveur hébergeant la base cible, et de lancer la commande duplicate. Cette méthode fonctionne pour les bases 9i, 10g et 11g.
- La deuxième méthode quand à elle ne nécessite pas de backup de la base source. Lorsque vous lancez la commande DUPLICATE sur la base cible, RMAN va effectuer sa sauvegarde, la transférer et l’importer directement via le réseau. Cette méthode ne fonctionne qu’avec les bases en 11g.
Sans backup (Active Database Duplication)
L’environnement : Nous avons une base existante nommée ISEC sur notre serveur ESXI-OEL5-ORA01 que nous voulons dupliquer sur notre serveur ESXI-OEL5-ORA02 en la nommant ISECDUP.
Sur la base source, nous allons générer le fichier de paramètre afin de le transférer sur notre serveur cible :
On le modifie pour changer toutes les occurrences du SID (ISEC -> ISECDUP).
:%s/ISEC/ISECDUP/g
On transfère notre fichier sur le serveur cible :
Sur notre serveur cible (ESXI-OEL5-ORA02), nous allons créer l’architecture qui va accueillir les fichiers de notre nouvelle base. Voici un exemple pour mon cas :
$ mkdir /oradata/ISECDUP/ctl02
$ mkdir /oradata/ISECDUP/log01
$ mkdir /oradata/ISECDUP/log02
$ mkdir /oradata/ISECDUP/dbf
On va maintenant démarrer l’instance de notre nouvelle base ISECDUP :
sqlplus / AS SYSDBA
SYS@ISECDUP> startup nomount pfile='/home/oracle/initISECDUP.ora'
Comme notre base cible est en NOMOUNT, nous devons l’enregistrer de façon statique dans notre listener.ora :
(SID_LIST =
(SID_DESC =
(SID_NAME = ISECDUP)
(ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1)
)
)
Sur les deux serveurs, source et cible, vous devez créer un TNSNAMES pointant vers la base cible. Dans notre cas nous avons ça :
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ESXI-OEL5-ORA02)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ISECDUP)
)
)
Enfin, toujours sur les deux serveurs, vous devez autoriser les connexion SYSDBA à distance et créer un fichier de mot de passe pour chaque base.
- Paramètre instance à modifier : remote_login_passwordfile (EXCLUSIVE ou SHARED)
- Création du fichier de mot de passe : orapwd file=orapwISEC password=tropsecure
Voilà tout est prêt, on va pouvoir commencer à dupliquer notre base !
Pour cela, démarrez RMAN sur le serveur cible :
La chaîne de connexion TARGET représente la base SOURCE, et la chaîne AUXILIARY c’est pour la base CIBLE.
Et pour finir, exécuter la fameuse commande DUPLICATE :
Résultat :
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=19 device type=DISK
...
database opened
Finished Duplicate Db at 10-OCT-11
Via un backup local de la source (Backup-Based Duplication)
L’environnement : Nous avons une base existante nommée ISEC sur notre serveur ESXI-OEL5-ORA01 que nous voulons dupliquer sur notre serveur ESXI-OEL5-ORA02 en la nommant ISECDUP.
Sur la base source, nous allons générer le fichier de paramètre afin de le transférer sur notre serveur cible :
On le modifie pour changer toutes les occurrences du SID (ISEC -> ISECDUP).
:%s/ISEC/ISECDUP/g
En plus des paramètres classiques, nous allons en rajouter deux qui vont être utilisés par Oracle pour placer au bon endroits nos fichiers de données et nos logs :
LOG_FILE_NAME_CONVERT=(ISEC,ISECDUP)
On transfère notre fichier de paramètre sur le serveur cible :
Deuxième étape, nous allons générer la sauvegarde RMAN qui va être utilisée pour la duplication :
Et on transfère nos sauvegardes sur le serveur cible :
Dernière étape à effectuer sur le serveur source, vérifier que la connexion SYSDBA à distance est activée et créer un fichier de mot de passe :
- Paramètre instance à modifier : remote_login_passwordfile (EXCLUSIVE ou SHARED)
- Création du fichier de mot de passe : orapwd file=orapwISEC password=tropsecure
Passons à présent sur le serveur cible (ESXI-OEL5-ORA02). Nous allons créer l’architecture qui va accueillir les fichiers de notre nouvelle base. Voici un exemple pour mon cas :
$ mkdir /oradata/ISECDUP/ctl02
$ mkdir /oradata/ISECDUP/log01
$ mkdir /oradata/ISECDUP/log02
$ mkdir /oradata/ISECDUP/dbf
On va maintenant démarrer l’instance de notre nouvelle base ISECDUP :
sqlplus / AS SYSDBA
SYS@ISECDUP> startup nomount pfile='/home/oracle/initISECDUP.ora'
Voilà tout est prêt on va pouvoir lancer la duplication :
Conclusion
Vous êtes maintenant capable de dupliquer une base Oracle 9i, 10g et 11g de manière rapide et parfaitement fonctionnelle. Vous trouverez certainement de nombreuses applications à ça, comme par exemple créer votre propre Oracle DataGuard