DUPLICATE…FROM ACTIVE DATABASE

Avez-vous déjà tenté de cloner une base à chaud…sans aucune sauvegarde RMAN? Vous pensez peut être à un « DUPLICATE » RMAN ? Et bien oui, mais pas tout à fait ! Pourquoi ? Un duplicate nécessite une sauvegarde RMAN disponible pour pouvoir créer la copie de la base. Mais la solution qui vous est proposée ici est de cloner une base sans avoir au préalable une sauvegarde RMAN.
Avec la 11g, Oracle offre cette possibilité avec la commande « DUPLICATE….FROM ACTIVE DATABASE ». Dans ce chapitre, vous trouverez les différentes étapes pour implémenter cette solution.
Dans l’exemple ci-dessous, vous allez dupliquez une base en version 11.2.0.1 sur un serveur Windows (XP/64bits).

  • Préparez l’arborescence qui va accueillir la nouvelle base :
C:ORACLE_DBSATURNE
C:ORACLE_DBSATURNEDATA
C:ORACLE_DBSATURNEREDO
C:ORACLE_DBSATURNECTRL
  • Générez un pfile de la base source :
C:>set ORACLE_SID=NEPTUNE
C:>sqlplus / as sysdba
SQL>create pfile='C:apporacleproduct11.2.0dbhome_1databaseinit_SATURNE.ora' from spfile;
Fichier créé.
SQL>exit
  • Ouvrez le fichier init_SATURNE.ora généré sous « %ORACLE_HOME%/database »

Modifiez toutes les entrées du fichier en remplaçant le nom de la base source par le nom de la base dupliquée :
Dans l’exemple, la chaîne NEPTUNE est remplacée par SATURNE, vous obtenez un fichier de ce style là :

*.audit_file_dest='C:apporacleadminsaturneadump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='C:ORACLE_DBSATURNEDATAcontrol01.ctl','C:ORACLE_DBSATURNECTRLcontrol02.ctl'
*.db_block_size=8192
*.db_domain='world'
*.db_name='saturne'
*.db_recovery_file_dest='C:apporacleflash_recovery_area'
*.db_recovery_file_dest_size=3117416448
*.diagnostic_dest='C:apporacle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=saturneXDB)'
*.nls_language='FRENCH'
*.nls_territory='FRANCE'
*.open_cursors=300
*.pga_aggregate_target=106954752
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=220864256
*.undo_tablespace='UNDOTBS1'
  • Créez le service windows associé à la nouvelle base
C:oradim -new -sid SATURNE
Instance créé.
  • Créez un fichier passwordfile avec l’utilitaire « orapwd »:
C:orapwd file=PWDSATURNE password=sys_pass01
  • Ajoutez le descripteur de connexion dans le fichier TNSNAMES.ora
SATURNE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = saturne)
)
)
  • Ajoutez uen entrée dans le fichier LISTENER.ora pour éviter que la nouvelle base bloque les connexions lorsqu’elle est en mode NOMOUNT :
(SID_DESC =
(SID_NAME = SATURNE)
(ORACLE_HOME = C:apporacleproduct11.2.0dbhome_1)
)
  • Rafraichissez les services du listener :
C:lsnrctl reload
...
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connexion à (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
La commande a réussi
  • Testez la connexion au service SATURNE
C:tnsping SATURNE
...
Adaptateur TNSNAMES utilisé pour la résolution de l'alias
Tentative de contact de (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = saturne)))
OK (90 msec)
  • Démarrez la base en mode NOMOUNT avec le fichier init_SATURNE.ora
C: sqlplus / as sysdba
SQL>startup nomount pfile='C:apporacleproduct11.2.0dbhome_1databaseinit_SATURNE.ora'
Instance ORACLE lancée.
Total System Global Area 221790208 bytes
Fixed Size 1373684 bytes
Variable Size 83888652 bytes
Database Buffers 134217728 bytes
Redo Buffers 2310144 bytes
SQL>exit
  • Connectez-vous à RMAN sur la base source (target) et sur la base cible (auxiliary) :
C:rman
RMAN> connect target sys/sys_pass123@NEPTUNE
connecté à la base de données cible : NEPTUNE (DBID=123456789)
RMAN> connect auxiliary sys/sys_pass01@SATURNE
connexion établie avec la base de données auxiliaire : SATURNE (non montée)
RMAN>
  • Lancez la commande de duplication :
RMAN> duplicate target database to SATURNE from active database
2>db_file_name_convert ‘C:ORACLE_DBNEPTUNEDATA','C:ORACLE_DBSATURNEDATA';
executing command: SET NEWNAME
executing command: SET NEWNAME
....
contenu de script mémoire:
{
Alter clone database open resetlogs;
}
exécution de script mémoire
base de données ouverte
Fin de Duplicate Db dans 27/03/12
RMAN>
  • Vérifiez l’état de votre nouvelle base :
C:sqlplus / as sysdba
SQL> select name from v$database;
NAME
---------
SATURNE
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> select file_name from dba_data_files;
FILE_NAME
-------------------------------------------------------
C:ORACLE_DBSATURNEDATASYSTEM01.DBF
C:ORACLE_DBSATURNEDATASYSAUX01.DBF
C:ORACLE_DBSATURNEDATAUNDOTBS01.DBF
C:ORACLE_DBSATURNEDATAUSERS01.DBF
C:ORACLE_DBSATURNEDATADATA01.DBF
C:ORACLE_DBSATURNEDATAINDXS01.DBF
SQL>

Et voilà, la nouvelle base est prête !
Pensez donc à cette solution lorsque vous avez une base à cloner. Cette fonctionnalité permet aussi de créer une STANDBY. L’option ‘FROM ACTIVE DATABASE’ offre donc un gain de temps sur la duplication d’une base de données. Vous disposez de données récentes et d’une image parfaite de la base source. Si vous prenez le temps d’éplucher la log RMAN vous comprendrez mieux la notion « ACTIVE DATABASE ». En effet, vous y verrez les différentes étapes de duplication. Il n’est pas nécessaire d’analyser la totalité de la log, mais vous constaterez qu’à un moment, RMAN effectue une sauvegarde de la base source. C’est cette sauvegarde qui sert à la duplication.
Sources :
Oracle® Database Backup and Recovery Reference
11g Release 1 (11.1)

1 réflexion sur “DUPLICATE…FROM ACTIVE DATABASE”

  1. Ping : Synchronisation standby avec Dbvisit - EASYTEAM

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *